Die wichtigsten grep-Parameter

Mit dem Befehl grep, kann man unter Linux sämtliche als Text vorliegenden Daten durchsuchen. Das ist in Verbindung mit Konvertierungsprogrammen wie:

  • antiword (.doc)
  • xlsx2csv (.xlsx)
  • docx2csv (.docx)
  • html2text (.html)
  • xls2csv (.xls)
  • pdftotext (.pdf)

extrem nützlich wenn man große Datenbestände in verteilten Ordnerstrukturen durchsuchen muss. Ein paar Grundlagen dazu habe ich ja bereits in meinem Artikel zu Datenauswertung für OSINT bereits beschrieben. Dort steht auch wie die Befehle konkret für die Konvertierung von mehreren Dateien eingesetzt werden können.

Der grep hat einige wichtige Optionen die ich hier vorstellen möchte

-E Man kann nun erweiterte reguläre Ausdrücke in den Suchen verwenden. Man kann also statt nach einer konkreten E-Mail-Adresse nach allen E-Mail-Adressen suchen. Der grep kann schon reguläre Ausdrücke, aber mit den erweiterten kann man noch einige Sachen besser beschreiben. (Nächste Woche folgt ein Artikel zu regulären und erweiterten Ausdrücken) Das <WO> ist der Platzhalter für die Dateien oder Verzeichnisse, in denen gesucht werden soll. Sollen auch Unterverzeichnisse durchsucht werden ist ein weiterer Parameter erforderlich.

grep -E  "<SUCHE>" <WO>

-i Die Groß- und Kleinschreibung wird ignoriert

grep -i "<SUCHE>" <WO>

-v Dreht die Suche um. Es wird also alles ausgegeben, was man in seiner Suche ausgeschlossen hat. Das kann nützlich sein um zu überprüfen ob man zu viel rausgeworfen hat. Manchmal ist es auch einfacher zu suchen was man nicht will und anschließend mit -v die Suche umzukehren. Man kann auch mehrere Parameter zusammenfassen wie im zweiten Beispiel:

grep -v "<SUCHE>" <WO>
grep -iv "<SUCHE>" <WO>

-f Man kann eine Datei mit unterereinanderstehenden Begriffen mitgeben, die z.B mit einer anderen verglichen werden soll. Je nachdem ob man Gemeinsamkeiten oder Unterschiede sucht, benötigt man noch den Parameter -v

grep  -f datei_2.txt datei_1.txt
grep -v -f datei_2.txt datei_1.txt

-o Schneidet das Gesuchte aus der Zeile aus. Angenommen man möchte einfach nur alle IP-Adressen, die in einem Dokument vorkommen, ohne den Kontext, damit man diese IP-Adressen wiederum mit Whois o.ä. weiterverarbeiten kann.

grep -o "<SUCHE>" <WO>

-A <ZAHL> gibt die in <ZAHL> angegebene Anzahl von Zeilen nach der Zeile aus, die man getroffen hat. Das ist ganz nützlich wenn man den Kontext, in dem der gesuchte Wert auftaucht, benötigt

grep -A 5 "<SUCHE>" <WO>

-B <ZAHL> macht fast das gleiche, nur diesmal sind es die Zeilen, die davor kamen

grep -B 5 "<SUCHE>" <WO>

-C <ZAHL> kombiniert -A und -B und gibt die gewünsche Anzahl davor und danach aus.

grep -C 5 "<SUCHE>"

-a Da auch in Binärdateien Textinhalte vorkommen können, hat grep diese Option, mit der man auch binäre Dateien auf Textinhalte durchsuchen kann.

grep -a <SUCHE> <WO>

-r grep durchsucht auch Unterverzeichnisse

grep -r <SUCHE>  <WO>

Es gibt noch viele weitere Parameter für grep. Aber das sind die, die ich üblicherweise benötige. Die restlichen findest du, wenn du >>man grep<< eingibst.

Man kann auch Textdaten z.B. mit cat an grep weitergeben. dann entfällt das <WO>

cat *.txt | grep <SUCHE>

Ein paar praktische Beispiele:

Du suchst nach dem Namen Maria in allen .txt Dateien

grep "Maria" *.txt

Du suchst Maria in allen Dateien des Ordners in dem du dich befindest inklusive aller Unterordner. Außerdem möchtest Du auch noch dass kleingeschriebene Marien gefunden werden. Der Punkt ist das Zeichen für den aktuellen Ordner, in dem man sich befindet.

grep -ir "Maria" .

Du hast zwar Maria gefunden, aber du bist dir nicht sicher, welcher der vielen Treffer der richtige ist. Du möchtest also die Zeilen vor und nach der Treffer sehen können

grep -r -C 5 "Maria" .

Du möchtest alle Datensätze aus allen CSV-Dateien in diesem Ordner haben, in denen nicht Maria steht. Dann suche nach Maria und dreht die Auswahl mit -v um.

grep -v "Maria" *.csv

Du möchtest überprüfen ob du zufällig Marias ungewollt rausgeworfen hast. Du kehrst also mit -v das Ergebnis um und suchst z.B. nach dem Buchstaben M um alle Zeilen zu sehen, in denen ein M vorkommt.

grep -v "Maria" *.csv | grep -i "m"

Im nächsten Artikel werde ich über die regulären und erweiterten Ausdrücke von grep schreiben, die z.T. auch in anderen Programmen wie XWays verwendet werden. Es gibt auch noch andere Systeme für reguläre Ausdrücke, aber wenn man sie grundsätzlich verstanden hat, sind auch die anderen Arten leichter verständlich.