grep, wc und nl
14. Januar 2013 / Bash / Ubuntu
×Info: This post is older than 2 years! Displayed information may be outdated!
Während grep
Suchstrings ausgibt, kann man mit wc
Wörter zählen. Das ist praktisch, wenn man z.B. eine häufig auftretende Zeichenkette in einer sehr großen Datei finden und zählen möchte.
Beispiel: WordPress SQL-Dump
WordPress speichert sämtliche Pfade absolut in der DB.
# sucht nach www.domain.de in der Datei dump.sql
grep 'www.domain.de' dump.sql
Mit obigem Befehl werden alle Zeilen mit Treffern in der Konsole ausgegeben. Übersichtlicher wird es, die Treffer zu extrahieren und in einer neuen Datei zu speichern:
# Treffer in neue Datei speichern
grep 'www.domain.de' dump.sql > matches.txt
Bei großen SQL-Blöcken, kann eine Zeile mehrere Bildschirmseiten füllen. In dem Fall:
# Treffer in neue Datei speichern mit Zeilenangabe
grep 'www.domain.de' dump.sql | nl > matches.txt
Möchte man die Treffer also schlicht zählen:
# Treffer zeilenweise asugeben mit -o
# und Zeilen zählen mit wc -l
grep -o 'www.domain.de' dump.sql | wc -l
Und weil wir fancy sind die Anzahl der Treffer in eine Datei ausgeben:
# Trefferzahl in Datei speichern
grep -o 'www.domain.de' dump.sql | wc -l > matches.txt
Rekursiv, ein Treffer pro Zeile, nicht in .svn-Dirs suchen:
# -v Option, kann länger dauern
grep -or "oldstring" ./* | grep -v "\.svn/*" > matches
# danach Duplikate rauswerfen
sort matches | uniq > matches_unique