如何在一堆文件中找到最后一个匹配的字符串

如何在一堆文件中找到最后一个匹配的字符串

我有一堆文件,我想在每个文件中找到一个字符串的最后一个匹配项。

grep text *.file给我所有的匹配项,而不是最后的匹配项。

ls *.file | xargs grep text | tail -n 1 给出匹配的最后一个文件的最后一行。

所以我想我想要的是一种说法:

ls *.file | (xargs grep text | tail -n 1)

但我不确定如何做到这一点,或者是否可行。

答案1

tail -n 1在循环中使用for。例如:

for name in *.file; do
    grep -H text "$name" | tail -n 1
done

(即使只给出一个文件,该-H选项也将始终打印文件名。)grep

答案2

命令上有一行命令tac,输出文件从结束到开始的内容:

find . -name *.log -exec sh -c "tac '{}' | grep -Hm1 text " \;

相关内容