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。嗯,只是一个建议。