ich für einen Test vorbereite, wenn ich auf einen Befehl/Ausdruck kam:Verwendung von grep „^ d“ in Unix
grep "^d" | wc -l
Kann jemand bitte erklären, warum dieser Befehl verwendet wird?
ich für einen Test vorbereite, wenn ich auf einen Befehl/Ausdruck kam:Verwendung von grep „^ d“ in Unix
grep "^d" | wc -l
Kann jemand bitte erklären, warum dieser Befehl verwendet wird?
Dies wird verwendet, um die Anzahl der Zeilen (in Datei oder von einer Pipe) zu zählen, die mit d
beginnen.
Ich kann mir vorstellen, dass es verwendet wird, um die Anzahl der Verzeichnisse in einem Verzeichnis zu zählen.
grep "^d" | wc -l
string
string
dir
dir2
dir3
3 //Out of wc -l command (ie) grep catches only three lines which started with "d"
obige Befehl ausführen sucht nach Eingabe von der Standardeingabe, nachdem Sie „Strg + D“ übergeben, die EOF, grep Fänge nur die Zeile, die mit „d“ und wc -l (ich würde grep greps :) bevorzugen) zählt die Anzahl der Zeilen, die grep an sie weitergibt.
Grundsätzlich liest Grep aus Dateien, Pipes und Standardeingabe. Dies ist der dritte Fall.
^
in einem regulären Ausdruck bedeutet "am Anfang einer Zeile".
Also ja das wird grep
für jede Zeile, die mit d
Beachten Sie, dass der Ausdruck in diesem Fall sein sollte: grep "^d" -c
, -c
Zähl- Streichhölzer, zu vermeiden, eine andere binäre Aufruf.
'grep -c '^ d'', eher - POSIX benötigt keine Optionen, die als solche analysiert werden, wenn Argumente vorangestellt sind, also während GNU-Tools die andere Reihenfolge zulassen, tun sie dies als Erweiterung. –
grep
druckt Linien, die eine Übereinstimmung für ein Muster enthalten.
So, grep "^d" | wc -l
zählt die Anzahl der Zeilen beginnend mit d
.
Sagen wir, ich unten Linien in foo.txt
:
dline1 abcd
dline2 abcd
line3 abcd
line4 abcd
dline5 abcd
dline6 abcd
Also, wenn ich laufen die unter Befehl:
cat foo.txt | grep "^d" | wc -l
Es gibt 4
, weil es 4 Zeilen (Zeilenzahl), beginnend mit d
.
cat foo.txt
liefert den Inhalt der Datei, die als Eingabe für grep "^d"
geleitet wird, die mit d
Ausgangsleitungen gibt, die als Eingabe an wc -l
geben wird, die schließlich die Linien in seinem Eingang zählt.
Hoffentlich nicht Verzeichnisse aus "ls -l" -Ausgabe zu zählen - die Best-Practice-Möglichkeiten zum zählen Verzeichnisse aus einem Skript nicht mit "ls" überhaupt. '(shopt -s nullglob; set - * /; echo $ #)' –
BTW, http://explainshell.com/ ist dein Freund für diese Klasse von Fragen. Überlegen Sie, ob Sie es in Zukunft verwenden und nur danach fragen, was unklar ist, nachdem Sie die Ergebnisse überprüft haben. –