2016-06-17 17 views
0

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?

+2

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 $ #)' –

+1

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. –

Antwort

1

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.

0
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.

1

^ 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.

+2

'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. –

0

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.

Verwandte Themen