sed, grep und awk

Die drei genannten sind sogenannte Stream-Editoren, d.h. prozessieren einen eingehenden Zeichenstrom (z.B. aus einer Datei), filtern also Zeichen heraus, oder reoganisieren in irgendeiner Weise, um den veränderten Zeichenstrom wieder auszugeben.

awk teilt dabei die Eingabedaten zeilenweise in Felder (wie die Zellen einer Tabelle) ein und führt die gewünschten Operationen damit aus, um die Daten Zeile für Zeile wieder auszugeben. Die einzelnen Zellen werden mit $NUMMER referenziert. Der Feldtrenner ist im Normalfall ein oder mehrere Leerzeichen oder Tab (sog. whitespaces), kann durch die -F Option und das ODER-Trennzeichen | auch als beliebig anders festgesetzt werden.

Als einfaches Beispiel wandeln wir eine Datei mit der Zeichenkette “1. Aufgabe – Wort oder Satz, Relativsatz” durch

awk -F'-|,|.' '{ print $1" - "$2" - "$3 }' <Datei>

in “1 – Aufgabe – Wort oder Satz – Relativsatz” um.

Alles klar? awk kann auch if-Anweisungen und Variablenzuweisungen und noch einiges mehr. Superschnell auch beim Arbeiten mit großen Textdateien (z.B. aus physikalischen Messungen), bei denen jede Tabellenkalkulation versagt. >>awk-Tutorial

sed, der stream editor kann das prinzipiell auch, benutzt aber eine andere Sprache. Am nützlichsten ist sed wohl, um Zeichenketten in Dateien zu suchen und zu ersetzen.

sed -i 's/Alt/Neu/g' <Datei>

Die Option -i sorgt dabei dafür, dass die Ersetzung direkt in der Datei vorgenommen und gespeichert wird, anstatt den veränderten Text an die Standartausgabe zu senden. Mit regulären Ausdrücken lassen sich allerdings quasi beliebige Aufgaben erledigen. >>sed one-liner

grep ist wohl vorwiegend als Suchwerkzeug zu gebrauchen.

grep -n -B3 -A3 'Suche' *.txt

Ein Parameter -v gibt an nach allem zu suchen, was den Ausdruck nicht enthält. -n zeigt die Zeilennummer an. -A und -B sagen wieviele Zeilen vor, und nach dem gefundenen Ausdruck angezeigt werden sollen (als Kontext).

Man hat durch die Kombination dieser Programme eine unglaubliche Vielzahl an Möglichkeiten zur Manipulation von Textdateien in der Hand. Hier einige nützliche Beispiele.

Schnipsel

  • Die eigene, vom Provider zugewiesene IP-Adresse ausgeben.
    wget http://checkip.dyndns.org/ -q -O - |
    grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>' | tail -n1
  • Ausdrücke zwischen begrenzenden Zeichenketten aus Datei herausfiltern
    grep -Po "^.*?VOR.*?NACH" <Datei> | sed -e "s/^.*VOR\(.*\)NACH$/\1/"
  • Alle Zeilen zwischen zwei Ausdrücken ausgeben, Beispiel: Kaptitel aus LaTeX-Datei in andere Datei schreiben.
    sed -n '/\\section{Einleitung}/,/\\section/p' Datei.tex > Einleitung.tex
  • “normale” E-Mail Adressen aus Datei filtern, eigentlich sind noch einige Zeichen mehrerlaubt.
    grep -oE '[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+' <Datei>

Wisst ihr auch noch einige nützliche?

About

Peter Pan. Kann fliegen mit Feenstaub.

Tagged with: , ,
Posted in Technik

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Posts by topic…
…by month
Have a look at…


%d bloggers like this: