要了解Grep选项-H在不同情况下的实际应用

时间:2009-07-13 21:36:10

标签: grep option

此问题基于this answer

为什么从两个命令获得相同的输出?

命令A

$sudo grep muel *                                                             /tmp
masi:muel

命令B

$sudo grep -H muel *                                                          /tmp
masi:muel

Rob的评论告诉我 Command A 不应该给我masi:,而只能muel

简而言之, -H的实际目的是什么?

4 个答案:

答案 0 :(得分:12)

如果给出了多个文件名,Grep将默认列出文件名。即使只给出一个文件名,-H选项也会这样做。在两个示例中,都给出了多个文件名。

这是一个更好的例子:

$ grep Richie notes.txt
Richie wears glasses.

$ grep -H Richie notes.txt
notes.txt:Richie wears glasses.

当您为未知数量的文件提供通配符时,它会更有用,即使通配符只匹配一个文件,您也总是希望打印文件名。

答案 1 :(得分:5)

如果你grep一个文件,-H会有所不同:

$ grep muel mesi
muel

$ grep -H muel mesi
masi:muel

这在各种脚本环境中可能很重要。例如,一个脚本(或一个非平凡的管道系列命令)可能不知道它实际处理的文件数量:一个或多个。

答案 2 :(得分:1)

当您从多个文件中进行grep时,默认情况下会显示找到匹配项的文件的名称。如果指定-H,则即使从单个文件grep,也将始终显示文件名。您可以指定-h从不显示文件名。

答案 3 :(得分:1)

Emacs有grep接口(M-x grep,M-x lgrep,M-x rgrep)。如果您要求Emacs在当前目录中搜索foo,那么Emacs会调用grep并处理grep输出,然后向您显示带有可点击链接的结果。可点击的链接,就像谷歌一样。

Emacs做的是它将两个选项传递给grep:-n(显示行号)和-H(显示文件名即使只有一个文件。点是一致性)然后将输出转换为可点击链接。

通常,一致性有利于成为一个好的API,但一致性与DWIM冲突。

直接使用grep时,您需要DWIM,因此不要传递-H。