Oft werden wir es mit Textdateien zu tun haben, dabei intessiert uns nur ein bestimmter Inhalt. Das können z.b. Log-Dateien sein oder Konfigurationsdateien. Hier erst einmal eine Übersicht:
more Datei less Datei (man kann zurückscrollen)
head -n Anzahl Datei
Zeigt die ersten Anzahl Zeilen einer Datei an
tail [- n Anzahl] [-f] Datei
Zeigt die letzten Anzahl Zeilen einer Datei an. Die Option -f bewirkt, dass sich tail danach nicht beendet, sondern wartet ob neue Zeilen in die Datei geschrieben werden (z.b. von anderen Programmen). Diese Änderungen werden dann auch angezeigt. Abbruch mit CTRL-c. Nützlich um z. B. Apache- oder Syslog -files „live“ zu beobachten.
grep Suchmuster Datei [Dateien]
Grep durchsucht Datei[en] nach Suchmustern und gibt die Zeilen der Datei[en] aus, wo das Suchmuster zutrifft.
Viele Funktionsschalter (z.B. -i
für das Ignorieren der Großschreibung) machen das Program sehr nützlich.
grep -c zählt auch die Anzahl der Treffer
siehe auch Suchen in und nach Dateien und Wie finde ich Dateien? Beispielweise sehr nützliche für mich ist der folgende Befehl zum durchsuchen von Dateien des aktuellen Verzeichnisses (und darunter) nach der bestimmten Zeichenkette „SUCHTEXT“
find . -type f -exec egrep -i "SUCHTEXT" /dev/null {} \;
Schneller ist die Verwendung von xargs
. Anstatt bei jedem Treffer das entsprechenden Kommando (bei exec) aufzurufen, wird xargs einfach die Liste der Dateien übergeben und xargs ruft dann den angegebenen Befehl (egrep -i „SUCHTEXT“
) mit der Dateiliste auf. Anstatt -exec anzugeben wird also einfach xargs
aufgerufen:
find . -type f | xargs egrep -i "SUCHTEXT"
sort Kriterien Datei
Sortiert Datei nach Kriterien. Bsp: sort -t : -k 3 /etc/passwd sortiert die Datei /etc/passwd nach der dritten Spalte und verwendet den Doppelpunkt als Spaltentrenner
cut -d','\ -f1
sed s/baum/busch/ gehoelze
ersetzt alle Vorkommen von Baum durch Busch der Datei „gehoelze“.
diff kann mehrere Formate erzeugen, im einfachsten Fall (ohne weitere Parameter) wird nur die geänderte Zeile und die Position angezeigt:
77c77 < start-stop-daemon --stop --signal 1 --quiet --exec "$SYSLOGNG" --pidfile "$PIDFILE" || { echo " not running."; return 1; } --- > start-stop-daemon --stop --signal 1 --quiet --exec "$SYSLOGNG" --pidfile "$PIDFILE" || return 1
Das ist nun nicht sehr menschenlesbar und man erkennt auch nicht den Kontext den geänderten Zeile. Daher eignet sich das unified-Format (Option -u) besser.
Anwendungsbeispiel
diff -u syslog-ng syslog-ng.new
ergibt die folgende Ausgabe
--- syslog-ng 2008-02-24 18:18:05.000000000 +0100 +++ syslog-ng.new 2008-02-24 18:20:45.000000000 +0100 @@ -74,7 +74,7 @@ echo -n "Reload system logging: $NAME" if /sbin/syslog-ng -s then - start-stop-daemon --stop --signal 1 --quiet --exec "$SYSLOGNG" --pidfile "$PIDFILE" || return 1 + start-stop-daemon --stop --signal 1 --quiet --exec "$SYSLOGNG" --pidfile "$PIDFILE" || { echo " not running."; return 1; } echo "." return 0 else
hinten wurde also die Meldung „not running“ eingefügt, falls syslog-ng nicht läuft. Die Zeile mit dem Minus als erstes Zeichen ist die alte Zeile und die mit dem Pluszeichen die Änderung. Diese Änderung kann man auch in eine Datei speichern:
diff -u syslog-ng syslog-ng.new > syslog-ng.patch
und auf allen passenden Systemen mit dem Befehl patch anwenden:
patch /etc/init.d/syslog-ng syslog-ng.patch
Der (erfolgreich) angewendete Patch wird nun nicht mehr benötigt.
Ein Regulärer Ausdruck (engl. Regular expression) ist in der Informatik lt. Wikipedia eine Zeichenkette, die der Beschreibung von Mengen beziehungsweise Untermengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient. Sie werden als Filter oder Schablone in fast allen Programmiersprachen verwendet.
RegExps: Zeichenketten können durch Kombinationen von Regulären Ausdrücken flexibel beschrieben werden:
Kriterium | Regulärer Ausdruck |
---|---|
wirkt auf Ausdrücke am Zeilenanfang | ^ |
wirkt auf Ausdrücke am Zeilenende | $ |
Null oder mehrere beliebige Zeichen | * |
Null oder mehrere Zeichen („x“) | [x]* |
Ein Zeichen | ? |
wirkt auf a oder b | a|b |
Ein oder kein Zeichen „x“ | [x]? |
Ein oder mehrere Zeichen („x“) | [x]+ |
Genau 5 „x“ | [x]{5} |
Zwischen 6 und 12 „x“ | [x]{6,12} |
Genau ein beliebiges Zeichen | . |
Ein Zeichen aus dieser Menge | A-Z a-z 0-9 [aeiou] usw…. |
Die regulären Ausdrücke können mit (runden) Klammern gruppiert werden.
spezielle Zeichen (wie $ oder \ selber) müssen mit \ „escaped“ werden, damit sie nicht von der Shell interpretiert werden.