如何从尾部grep输出并包含文件名?

问题描述

this 怎么样:

tail -n +1 *.txt | grep foo

稍微修改显示文件名?

当它没有通过管道传输时,文件名很方便地成为输出的一部分。 grep 操作可以限制在文件内容上,同时保留输出文件名吗?

解决方法

你可以使用一个简单匹配的正则表达式;

  • 所有文件名; ==>(.*)<==
  • 您的“搜索”字符串(例如:foo
tail -n +1 * | grep -E '==>(.*)<==|foo'

花药选项,基于 my original answer,通过 -exec 运行 grep,如下所示:

find . -type f -print -exec grep 'foo'  {} \;

在 3 个文件 ({a,b,c}.txt) 中使用两种方法的示例,所有文件都包含 abc

bash-3.2$ tail -n +1 *
==> a.txt <==
a
b
c


==> b.txt <==
a
b
c


==> c.txt <==
a
b
c


bash-3.2$ tail -n +1 * | grep -E '==>(.*)<==|c'
==> a.txt <==
c
==> b.txt <==
c
==> c.txt <==
c


bash-3.2$ find . -type f -print -exec grep 'c' {} \;
./c.txt
c
./b.txt
c
./a.txt
c