Shell-Script
來自關鍵字列表的 grep
在過去的幾天裡,我一直在嘗試探勘文件目錄以報告包含關鍵字的文件。
grep
在其他使用者向我展示and的正確語法的幫助下sed
,我提出了以下執行良好的解決方案。不幸的是,它有點重複,我想重構它。echo "<HR><BR><B><h2>Search for Keyword: KeyWord1<BR></B></h2><ol>" >> temp.txt grep -lr -Fiw 'KeyWord1' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' >> temp.txt echo "</ol>" >> temp.txt echo "<HR><BR><B><h2>Search for Keyword: KeyWord2<BR></B></h2><ol>" >> temp.txt grep -lr -Fiw 'KeyWord2' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' >> temp.txt echo "</ol>" >> temp.txt echo "<HR><BR><B><h2>Search for Keyword: KeyWord3<BR></B></h2><ol>" >> temp.txt grep -lr -Fiw 'KeyWord3' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' >> temp.txt echo "</ol>" >> temp.txt
我想產生與上面生成的輸出相同的結果,但要消除混亂。請就如何正確實現以下目標提出建議:
Var myList = "KeyWord1, KeyWord2, KeyWord3" while myList; Do echo "<HR><BR><B><h2>Search for Keyword: $myList<BR></B></h2><ol>" >> temp.txt grep -lr -Fiw '$myList' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' >> temp.txt echo "</ol>" >> temp.txt ; done
你的猜測非常接近。你可以做
for w in 'KeyWord1' 'KeyWord2' 'KeyWord3' do echo "<HR><BR><B><h2>Search for Keyword: $w<BR></B></h2><ol>" >> temp.txt grep -lr -Fiw "$w" * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' >> temp.txt echo "</ol>" >> temp.txt done
作為風格問題,我會將其更改為
for w in 'KeyWord1' 'KeyWord2' 'KeyWord3' do echo "<HR><BR><B><h2>Search for $w: KeyWord1<BR></B></h2><ol>" grep -lr -Fiw "$w" * | sed -e 's|.*|<li><a href="http://&">&</a></li>|' echo "</ol>" done > temp.txt
您的版本會將此新內容附加到預先存在的
temp.txt
文件中。如果那是您真正想要做的,請將>
背面更改為>>
.temp.txt
在那之後,為整個循環打開一次而不是為每個關鍵字寫三次(無限地)效率更高。PS 我突然想到,您可能
<html><head>…</head><body>
在執行此操作之前已寫入輸出文件,因此您當然需要將其附加到該預先存在的內容。