Um zu verstehen, die praktische Anwendung von Grep die option -H in verschiedenen Situationen
Diese Frage basiert auf diese Antwort.
Warum bekommt man die gleiche Ausgabe von den beiden Befehlen?
Befehl Ein
$sudo grep muel * /tmp
masi:muel
Befehl B
$sudo grep -H muel * /tmp
masi:muel
Rob ' s Kommentar suggeriert mir, dass Befehl Ein, sollten Sie nicht geben Sie mir masi:
, aber nur muel
.
Kurz, was ist der praktische Zweck des -H
?
- Sie gehen durch jeder und jede option von jedem *nix Befehlszeile-Dienstprogramm? Einfach Fragen ...
- Es ist nicht GANZ auf dem level von "was -H tun", mehr "in welcher situation könnte Sie es verwenden". Nicht eine große Frage, die Titel, zugegeben.
- Jack Jedoch, siehe stackoverflow.com/users/54964?tab=recent#sort-top
- Danke für Eure Antworten!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grep listet die Dateinamen, die standardmäßig aktiviert, wenn mehr als ein Dateiname angegeben ist. Die
-H
option, die es tun, auch wenn nur ein Dateiname angegeben ist. In beiden deiner Beispiele, mehr als ein Dateiname angegeben ist.Hier ein besseres Beispiel:
Ist es nützlich, wenn Sie geben Sie einen Platzhalter für eine unbekannte Zahl von Dateien, und Sie wollen immer die Dateinamen gedruckt, auch wenn die wildcard nur mit einer Datei.
Wenn Sie grep eine einzelne Datei, -H macht einen Unterschied:
Diese erheblich sein können in verschiedenen scripting Kontexten. Zum Beispiel, ein Skript (oder eine nicht-triviale Pipe Serie von Befehlen) sind möglicherweise nicht bewusst, wie viele Dateien es ist eigentlich Umgang mit: einer oder viele.
-H
bitte. Ich habe noch nie erforderlich bevor.xargs
ist ein Ort; wenn nur eine Datei gesendet, die dann diegrep
wird nicht gedruckt der name der Datei, es sei denn, Sie entweder zu sagen, es (GNUgrep -H
, aber nicht POSIX -grep
) oder es sei denn, Sie verwenden 'xargs grep whatever /dev/null
", so dassgrep
sieht immer mindestens zwei Dateinamen (eigentlich, wenn es keine Namen,xargs
läuft immer nochgrep something /dev/null
, aber das erzeugt keine Ausgabe - wohl das, was gesucht wurde, sowieso). Sie können auch diesen Effekt, wennxargs
Prozesse, Dateien in Chargen von 20, und Sie haben 41 Dateien Gesamt. Es ist zum verzweifeln, nicht zu sehen, die Letzte Datei-name!Wenn Sie grep aus mehreren Dateien, standardmäßig wird der name der Datei, in der die übereinstimmung gefunden wurde. Wenn Sie angeben-H, der name der Datei wird immer angezeigt, auch wenn Sie grep aus einer einzigen Datei. Sie können angeben -h nie zeigen Sie die Datei name.
Emacs hat grep-Schnittstelle (M-x grep, M-x lgrep, M-x rgrep). Wenn Sie Fragen, Emacs, um die Suche für die foo im aktuellen Verzeichnis, dann Emacs ruft grep und Prozess der grep-Ausgabe und dann präsentieren Sie die Ergebnisse mit anklickbaren links. Anklickbare links, genau wie Google.
Was Emacs tut, ist, dass es geht zwei Optionen für grep: -n (show line number) und -H (zeige Dateinamen, auch wenn nur eine Datei. der Punkt ist die Konsistenz) und drehen Sie dann den Ausgang in klickbare links.
Im Allgemeinen, die Konsistenz ist gut für eine gute API, aber die Konsistenz Konflikte mit DWIM.
Wenn Sie direkt mit grep, Sie wollen DWIM, so dass Sie don ' T-pass -H.