如何从 tail 中获取 grep 输出并包含文件名?
How to grep output from tail and include file names?
怎么样:
tail -n +1 *.txt | grep foo
稍微修改以显示文件名?
当它没有通过管道传输时,文件名很方便地成为输出的一部分。 grep
操作是否可以限制在文件的内容中,同时保留输出文件名?
您可以使用匹配的简单正则表达式;
- 所有文件名;
==>(.*)<==
- 您的 'search' 字符串(例如:
foo
)
tail -n +1 * | grep -E '==>(.*)<==|foo'
另一个选项,基于 由 运行 到 -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
tail -n +1 *.txt | grep foo
稍微修改以显示文件名?
当它没有通过管道传输时,文件名很方便地成为输出的一部分。 grep
操作是否可以限制在文件的内容中,同时保留输出文件名?
您可以使用匹配的简单正则表达式;
- 所有文件名;
==>(.*)<==
- 您的 'search' 字符串(例如:
foo
)
tail -n +1 * | grep -E '==>(.*)<==|foo'
另一个选项,基于 -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