我有一堆文件,我想在每个文件中找到一个字符串的最后一个匹配项。
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 " \;