Die Kommandozeile ist dein Freund #4

04.06.2014 Bild

In der guten alten Zeit haben wir nur in der Kommandozeile herumgehackt (Hello C64, hello DOS...). Dann sind wir zu Affen verkommen und haben nur mehr Dinge mit der Maus herum geschoben. In dieser Serie werden wir einem Virtuosen der Kommandozeile über die Schulter blicken und dürfen uns dabei das eine oder andere Schmankerl abschauen.

 

fgrep suchstring sucht nach dem angegeben String in der Eingabe und gibt nur Zeilen aus die diesen beinhalten. Optional kann noch eine Datei angegeben werden. Z.B. alle hrefs in einer HTML Datei suchen:

fgrep href= test.html

grep regex sucht stattdessen nach der angegeben regular expression, egrep genauso, aber mit vollständigerer regex Unterstützung. Um die regex direkt an grep oder egrep zu übergeben kann dieser Parameter in Anführungszeichen als 'regex' geschrieben werden - sonst könnten Teile davon schon von der Shell ausgewertet werden. Um z.B. alle Dateinamen mit Timestamp zu finden:

ls -1 | egrep '[0-9]{8}T[0-9]{4,6}'

grep, fgrep und egrep akzeptieren noch -v als Parameter um die Ausgabe umzukehren (alle Zeilen die nicht zutreffen), mit -i wird case insensitive gesucht. Für die rekursive Suche in einem Verzeichnis kann -r verwedent werden wie in

fgrep -vr '<?php' .

 - suche alle Dateien in denen nicht '<?php' vorkommt, vom aktuellen Verzeichnis aus. Alle drei akzeptieren auch -B 2 und -A 2 um die 2 Zeilen davor (Before) oder danach (After) mitauszugeben; oder natürlich auch eine andere Anzahl.

 

Mit curl http://example.com wird die angegebene Seite aufgerufen und das Ergebnis ausgegeben. Das kann gleich kombiniert werden um z.B. den title Tag zu finden:

curl http://example.com | fgrep '<title>'

curl -D - http://example.com (dump header) gibt die Header mit aus, wobei der Parameter nach -D ein Dateiname ist und - für die Standardausgabe steht. Genauso können die Header auch in einer Datei gespeichert werden

curl -D /tmp/header.txt http://example.com

Überhaupt gleich nur die Header mit einem HEAD Request können mit curl -I http://example.com/ abgefragt werden (info).

curl -I http://example.com/

 

Mit wc -l werden die Zeilen in einer Ausgabe oder einer Datei gezählt. 

echo -n 'Dateien im Verzeichnis:' ; ls -1 | wc -l

cut kann verwendet werden um nur einen Teil einer Zeile auszugeben, dabei gibt cut -c 1-10 die Zeichen (chars) 1-10 aus, cut -d ',' -f 1-4 die Felder 1-4, wobei das Zeichen das an -d (delimiter) übergeben wird als Trennzeichen verwendet wird. Die Bereiche können auch offen sein wie in cut -c 5- oder ls -l | cut -c -11, oder auch nur ein Feld beinhalten wie in cat test.csv | cut -d ',' -f 3.

ls -l | cut -c -11
cat test.csv | cut -d ',' -f 3


sort sortiert alle Zeilen in der Ausgabe alphabetisch, sort -n numerisch.

sort words.txt 

uniq (unique) gibt von einer sortierten Liste bei mehreren aufeinanderfolgenden gleichen Zeilen nur die letzte aus, uniq -c (count) dazu einen Zähler wie oft sich die Zeile wiederholt. Z.B. um aus dem system.log die Stunde mit den häufigsten Einträgen, wieder sortiert nach Häufigkeit, auszugeben kann folgendes verwendet werden:

cat /var/log/system.log | cut -c 8-9 | egrep '^[0-9]+' | sort | uniq -c | sort -n

Zum besseren Verständnis über die gemachten Schritte am besten auch die Zwischenergebnisse anschauen.

Mehr Befehle für deinen neuen Freund findest du hier:

Die Kommandozeile ist dein Freund #1

Die Kommandozeile ist dein Freund #2

Die Kommandozeile ist dein Freund #3