grep recursive + backwords +最后一场比赛

时间:2014-05-21 17:21:57

标签: linux unix grep

这是我想要实现的目标。

我想在子目录中递归搜索模式,并返回每个文件中的最后一个匹配项。

我试过

grep -r "UVM_INFO" run.*/mti.log | tail -n 1

但是这只返回它搜索的最后一个文件中的最后一个匹配项。但是,我希望每个匹配的文件中的最后一个匹配。

3 个答案:

答案 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进程,效率会降低。