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