这是我想要实现的目标。
我想在子目录中递归搜索模式,并返回每个文件中的最后一个匹配项。
我试过
grep -r "UVM_INFO" run.*/mti.log | tail -n 1
但是这只返回它搜索的最后一个文件中的最后一个匹配项。但是,我希望每个匹配的文件中的最后一个匹配。
答案 0 :(得分:1)
这是user1234424's solution的清理版本。
我不是100%确定grep -r
如何处理符号链接,因此find
可能需要对此进行一些调整,但这应该是正确的。
find run.*/mti.log -type f -print0 | while read -rd '' filename; do grep UVM_INFO "$filename"|tail -1; done
答案 1 :(得分:0)
你可以这样做:
echo " " > results
for filename in find $(run.*/mti.log)
do
grep "UVM_INFO" $filename|tail -n 1 >> results
done
答案 2 :(得分:0)
@Aaron's solution的另一个变体:
find run.*/mti.log -type f -exec sh -c 'grep UVM_INFO {} | tail -n 1' \;
如果没有while
循环,它会更短,但由于为每个文件生成一个新的sh
进程,效率会降低。