在过去的几天里,我一直在尝试挖掘文件目录以报告包含关键字的文件。通过其他用户向我展示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
答案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" . …
。