以下代码有效,但速度很慢:
#!/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
不是正则表达式:它们是纯文本字符串。
有任何想法吗?