以下代码有效,但速度很慢:
#!/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
中有一个或多个匹配项的文件名?
例如,如果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
中的行不是正则表达式:它们是纯文本字符串。
有什么想法吗?
答案 0 :(得分: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