首页 > 解决方案 > 如何从tail输出grep并包含文件名?

问题描述

是怎么回事:

tail -n +1 *.txt | grep foo

稍作修改以显示文件名?

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

标签: linuxbashgreppipetail

解决方案


您可以使用匹配的简单正则表达式;

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

花药选项,基于我原来的答案-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

推荐阅读