grep 从关键字列表中

grep 从关键字列表中

在过去的几天里,我一直在尝试挖掘文件目录以报告包含关键字的文件。通过其他用户向我展示grepand的正确语法的帮助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

答案1

你的猜测非常接近。你可以做

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> 在执行此操作之前,您可能已经写入了输出文件,所以当然您需要将其附加到预先存在的内容中。

答案2

嗨大卫 - 我想在 G-Man 的回答中添加评论,但我没有要点。

只是想用递归 grep 添加这一点,您可能想指定要搜索的一个或多个目录,而不是通配符,所以更像是 grep -lr -Fiw "$w" . …

相关内容