Чтобы понять практическое использование опции Grep -H в разных ситуациях - PullRequest
5 голосов
/ 14 июля 2009

Этот вопрос основан на этом ответе .

Почему вы получаете одинаковый вывод от обеих команд?

Команда A

$sudo grep muel *                                                             /tmp
masi:muel

Команда B

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

Комментарий Роба подсказывает, что Команда A не должна давать мне masi:, а только muel.

Короче говоря, какова практическая цель -H?

Ответы [ 4 ]

12 голосов
/ 14 июля 2009

Grep выведет список имен файлов по умолчанию, если указано более одного имени файла. Опция -H делает это, даже если указано только одно имя файла. В обоих ваших примерах указано более одного имени файла.

Вот лучший пример:

$ grep Richie notes.txt
Richie wears glasses.

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

Это более полезно, когда вы указываете шаблон для неизвестного числа файлов, и вы всегда хотите, чтобы имена файлов были напечатаны, даже если шаблон соответствует только одному файлу.

5 голосов
/ 14 июля 2009

Если вы grep одного файла, -H имеет значение:

$ grep muel mesi
muel

$ grep -H muel mesi
masi:muel

Это может быть важно в различных контекстах сценариев. Например, сценарий (или нетривиальный ряд команд по конвейеру) может не знать, сколько файлов он имеет в действительности: один или несколько.

1 голос
/ 14 декабря 2009

Emacs имеет интерфейс grep (M-x grep, M-x lgrep, M-x rgrep). Если вы попросите Emacs найти foo в текущем каталоге, Emacs вызовет grep и обработает вывод grep, а затем предоставит вам результаты с интерактивными ссылками. Кликабельные ссылки, как Google.

Что делает Emacs, так это то, что он передает две опции в grep: -n (показать номер строки) и -H (отображать имена файлов, даже если только один файл. Точка согласованности), а затем превращает вывод в интерактивные ссылки. *

В целом, согласованность хороша для того, чтобы быть хорошим API, но согласованность конфликтует с DWIM.

Когда вы напрямую используете grep, вы хотите DWIM, чтобы вы не передавали -H.

1 голос
/ 14 июля 2009

Когда вы выполняете grep из нескольких файлов, по умолчанию отображается имя файла, в котором найдено совпадение. Если вы укажете -H, имя файла будет отображаться всегда, даже если вы выполняете grep из одного файла. Вы можете указать -h, чтобы никогда не показывать имя файла.

...