Shell-Script

來自關鍵字列表的 grep

  • April 21, 2019

在過去的幾天裡,我一直在嘗試探勘文件目錄以報告包含關鍵字的文件。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> 在執行此操作之前已寫入輸出文件,因此您當然需要將其附加到該預先存在的內容。

引用自:https://unix.stackexchange.com/questions/513693