问题描述
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
) 中使用两种方法的示例,所有文件都包含 a
、b
和 c
。
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