这个问题是基于这样的回答 。
为什么你从两个命令的输出一样吗?
命令A
$sudo grep muel * /tmp
masi:muel
命令B
$sudo grep -H muel * /tmp
masi:muel
罗布的意见建议我下的命令一个不应该给我masi:
,但只muel
。
总之, 什么是实际目的-H
?
如果超过一个给出文件名grep的将默认列出的文件名。 该-H
选项,可以做,即使只有一个文件名中给出。 在这两个你的例子,一个以上的文件名中给出。
这里有一个更好的例子:
$ grep Richie notes.txt
Richie wears glasses.
$ grep -H Richie notes.txt
notes.txt:Richie wears glasses.
当你给它一个通配符未知数量的文件,而你总是要打印的文件名,即使通配符匹配只有一个文件更为有用。
如果你用grep一个文件,-H有差别:
$ grep muel mesi
muel
$ grep -H muel mesi
masi:muel
这可能是在不同的脚本环境显著。 例如,一个脚本(或一个不平凡的管道一系列命令)可能不知道它有多少个文件实际处理:一,还是很多的。
当您从多个文件的grep,默认情况下它显示了找到匹配的文件名。 如果指定-H,文件名会一直显示,即使你从一个单一的文件的grep。 您可以指定-h从不显示文件名。
Emacs有grep的接口(MX的grep,的Mx lgrep,的Mx rgrep)。 如果你问的Emacs在当前目录中搜索FOO,然后调用Emacs的grep和处理grep的输出,然后为你展示与点击链接的结果。 可点击的链接,就像谷歌。
什么Emacs也就是它通过两个选项给grep:(显示文件名,即使只有一个文件的一点是一致性)-N(显示行号)和-H然后打开输出为可点击的链接。
在一般情况下,一致性好,作为一个良好的API,但一致性DWIM冲突。
当您直接使用grep,你想DWIM,让你不及格-H。
文章来源: To understand the practical use of Grep's option -H in different situations