Bash 按文件列出匹配的固定字符串
以下代码可以工作,但速度非常慢:Bash 按文件列出匹配的固定字符串,bash,optimization,grep,Bash,Optimization,Grep,以下代码可以工作,但速度非常慢: #!/bin/bash for f in *.xml; do for r in $(cat ../reports.txt); do grep -q "$r" $f if [ $? -eq 0 ]; then echo "$r,$f" fi done done 这可以通过以下方式加快速度: for f in *.xml; do grep -lif ../reports.txt $f done 但是,这不会显示在
#!/bin/bash
for f in *.xml; do
for r in $(cat ../reports.txt); do
grep -q "$r" $f
if [ $? -eq 0 ]; then
echo "$r,$f"
fi
done
done
这可以通过以下方式加快速度:
for f in *.xml; do
grep -lif ../reports.txt $f
done
但是,这不会显示在reports.txt
中找到的与文件匹配的行($f
)
您将如何显示在每个文件中找到的reports.txt
中的匹配行,以及与reports.txt
中有1个或多个匹配项的文件名
例如,如果reports.txt
包含:
aardvark
aardwolf
anteater
This is a story about an aardvark and an aardwolf.
其中一个文件(如story.txt)包含:
aardvark
aardwolf
anteater
This is a story about an aardvark and an aardwolf.
然后,我尝试生成以下输出:
story.txt,aardvark
story.txt,aardwolf
如果有用的话,reports.txt
中的行不是正则表达式:它们是纯文本字符串
有什么想法吗?看看这个,它符合你的要求吗
kent$ head report.txt story.txt
==> report.txt <==
aardvark
aardwolf
anteater
==> story.txt <==
is a story about an aardvark and an aardwolf.
kent$ grep -Hof report.txt story.txt
story.txt:aardvark
story.txt:aardwolf
令人恼火的是,在我的OS X grep上,输出是
story.txt:aardvarkaardwolf
,即第二个story.txt
丢失。对不起,我没有mac做进一步的测试。。。我粘贴我的grep版本作为答案。这就是我在手册页中寻找的论点。谢谢,肯特。我本来打算发布-Hof
,但没有发布,因为我的grep没有生成所需的输出。顺便说一句,如果您只想进行固定字符串匹配,最好也使用-F。嗯,只是一个建议。