如何让grep在其输出中匹配行之前显示文件名?


当前回答

这是对以前解决方案的轻微修改。我的例子在bash脚本中寻找stderr重定向: Grep '2>' $(查找。- name“* .bash”)

其他回答

这是对以前解决方案的轻微修改。我的例子在bash脚本中寻找stderr重定向: Grep '2>' $(查找。- name“* .bash”)

不需要什么技巧。

grep --with-filename 'pattern' file

带行号:

grep -n --with-filename 'pattern' file

试试这个小技巧,让grep认为它正在处理多个文件,这样它就会显示文件名:

grep 'pattern' file /dev/null

也可以得到行号:

grep -n 'pattern' file /dev/null
grep 'search this' *.txt

对我来说,搜索所有的.txt文件很有用(当然,输入你自己的搜索值)。

如果你有-H和-n选项可用(man grep是你的朋友):

$ cat file
foo
bar
foobar

$ grep -H foo file
file:foo
file:foobar

$ grep -Hn foo file
file:1:foo
file:3:foobar

选项:

- h, with-filename 打印每个匹配的文件名。当有时,这是默认值 一个以上的文件 搜索。 - n,行编号 在输出的每一行前面加上以1为基础的行号 输入文件。(- n是 由POSIX指定。)

-H是GNU扩展,但-n是POSIX指定的