To understand the practical use of Grep's option -H in different situations

可紊 提交于 2019-12-21 05:08:07

问题


This question is based on this answer.

Why do you get the same output from the both commands?

Command A

$sudo grep muel *                                                             /tmp
masi:muel

Command B

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

Rob's comment suggests me that Command A should not give me masi:, but only muel.

In short, what is the practical purpose of -H?


回答1:


Grep will list the filenames by default if more than one filename is given. The -H option makes it do that even if only one filename is given. In both your examples, more than one filename is given.

Here's a better example:

$ grep Richie notes.txt
Richie wears glasses.

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

It's more useful when you're giving it a wildcard for an unknown number of files, and you always want the filenames printed even if the wildcard only matches one file.




回答2:


If you grep a single file, -H makes a difference:

$ grep muel mesi
muel

$ grep -H muel mesi
masi:muel

This could be significant in various scripting contexts. For example, a script (or a non-trivial piped series of commands) might not be aware of how many files it's actually dealing with: one, or many.




回答3:


When you grep from multiple files, by default it shows the name of the file where the match was found. If you specify -H, the file name will always be shown, even if you grep from a single file. You can specify -h to never show the file name.




回答4:


Emacs has grep interface (M-x grep, M-x lgrep, M-x rgrep). If you ask Emacs to search for foo in the current directory, then Emacs calls grep and process the grep output and then present you with results with clickable links. Clickable links, just like Google.

What Emacs does is that it passes two options to grep: -n (show line number) and -H (show filenames even if only one file. the point is consistency) and then turn the output into clickable links.

In general, consistency is good for being a good API, but consistency conflicts with DWIM.

When you directly use grep, you want DWIM, so you don't pass -H.



来源:https://stackoverflow.com/questions/1122218/to-understand-the-practical-use-of-greps-option-h-in-different-situations

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!