grep文件列表中的最后一个匹配项

时间:2019-07-15 16:17:25

标签: bash grep xargs

我在同一文件夹下有很多文件:

uut01_010203030.txt
uut02_020038300.txt
uut03_202002003.txt

我可以单独grep最后一次出现的情况:

tac uut01_*.txt | grep -m 1 'some_pattern'

我可以提供文件以grep文件中首次出现的模式:

ls uut*.txt | xargs grep -m 1 'some_pattern'

但是,我不能真正将tac和grep结合在一起,以下命令给我错误:

ls uut*.txt | xargs tac | grep -m 1 'some_pattern'
xargs: tac: terminated by signal 13

该如何解决?

2 个答案:

答案 0 :(得分:0)

$ tail -n +1 file*
==> file1 <==
1
2
3

==> file2 <==
1
2
3
4
5

==> file3 <==
1
2
3
4

$ grep -H '.' file* | tac | awk -F':' '!seen[$1]++'
file3:4
file2:5
file1:3

$ awk '/./{hits[FILENAME]=$0} END{for (f in hits) print f, hits[f]}' file*
file1 3
file2 5
file3 4

答案 1 :(得分:-1)

是的,我喜欢以下命令效果很好:

for f in $(find . -name "uut*"); do tac $f | grep -m 1 'some_pattern'; done