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

Bash grep文件列表中的最后一个匹配,bash,grep,xargs,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*

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

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

我能做些什么来解决这个问题?

是的,我喜欢以下命令非常有效:

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

==>文件1文件2文件3您想要实现什么?有这么多选项…uut*.txt中文件的
如何;执行…
ls uut*.txt | xargs-L 1 sh-c'tac“$0”| grep…'
Ack!不要那样做。而是使用-exec并执行类似于
find的操作-名称'uut*'-exec sh-c'grep“foo”$1 | sed-n“\$p”\{}使用-exec的原因是什么?为什么使用for循环不好?
$ 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