Sed/Anweisungen

Aus Foxwiki

Aufbau der sed-Anweisungen

sed-Anweisungen werden meist von einfachen Hochkomma umschlossen.

sed 'anweisung' < sed-test.txt

sed kann mehrere Anweisungen in einem Durchgang abarbeiten.

  • In diesem Falle muss jedem Befehl die Option "-e" vorangestellt werden.
  • Wenn nur eine Anweisung abgearbeitet werden soll, kann man "-e" weglassen.
sed -e 'anweisung1' -e 'anweisung2' < sed-test.txt

möglich, aber etwas unübersichtlicher ist auch diese Form:

sed -e 'anweisung1; anweisung2' < sed-test.txt

In vielen sed-Anweisungen kommt das Zeichen '/' vor.

  • Es ist ein Begrenzungszeichen, also ein "delimiter".
  • Eine Regular Expression, also ein Suchausdruck, wird durch zwei Schrägstriche begrenzt.
  • Im folgende kürze ich "Regular Expression" durch "RE" ab.

Unvollständige Anweisung:

sed '/isst/' < sed-test.txt
  • sed durchsucht die Datei Zeile pro Zeile nach dem String "isst"
  • die RE "isst" wird durch "/" am Anfang und Ende eingegrenzt.
  • "/" ist also nichts anderes als ein Begrenzungszeichen, ähnlich wie Hochkommata

Die vorige Anweisung ist unvollständig, da sie nur aus der RE '/isst/' besteht.

  • sed muss noch mitgeteilt werden, wie mit dem Suchergebnis zu verfahren ist.

Hinter der durch die RE getroffenen Bereichsauswahl ist der Befehl anzugeben.

  • Eine sed-Anweisung enthält also i.A.
  • mindestens zwei Komponenten (die Bereichsauswahl kann in bestimmten Konstrukten fehlen): # Bereichsauswahl
    Auswahl der Zeilen, die bearbeitet werden sollen.
  • Im vorigen Beispiel würde sich die Auswahl auf alle Zeilen beziehen, in denen "isst" vorkommt.
  1. Befehl
    Was soll mit den ausgewählten Zeilen passieren? Der einfachste Befehl lautet "p" (print), er gibt die selektierten Zeilen am Bildschirm aus.

Das vorige Beispiel wird vervollständigt:

sed '/isst/p' < sed-test.txt
  • Durchsuchen der Datei nach Zeilen, die "isst" enthalten
  • Die selektierten Zeilen werden am Bildschirm ausgegeben
  • "/" umschließt die RE, hat also mit dem Befehl "p" nichts zu tun.

Leider liefert die sed-Anweisung ein unbefriedigendes Ergebnis, da alle Zeilen ausgegeben werden.

Dies liegt an der Arbeitsweise von sed.

  • Um das gewünschte Ergebnis zu erhalten, muss sed mit der Option "-n" aufgerufen werden:
sed -n '/isst/p' < sed-test.txt 
  • beim p-Befehl immer die Option "-n" verwenden!
  • aufgrund der Option "-n" werden nur die Zeilen ausgegeben, in denen "isst" vorkommt.

Wenn man die Option "-e" verwendet, muss beachtet weden, dass "-n" vor "-e" steht.

sed -n -e '/isst/p' < sed-test.txt 
  • "-e" muss hinter "-n" stehen!