1

以下代码有效,但速度很慢:

#!/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在每个文件中找到的匹配行以及具有 1 个或多个匹配项的文件的名称reports.txt

例如,如果reports.txt包含:

aardvark
aardwolf
anteater

其中一个文件(例如,story.txt)包含:

This is a story about an aardvark and an aardwolf.

然后我试图产生以下输出:

story.txt,aardvark
story.txt,aardwolf

如果有帮助,则其中的行reports.txt不是正则表达式:它们是纯文本字符串。

有任何想法吗?

4

1 回答 1

3

看看这个,符合你的要求吗?

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

测试是用 grep 完成的:

kent$  grep --version|head -1
grep (GNU grep) 2.14
于 2013-01-29T00:17:54.363 回答