Sed/Anweisungen
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.
- 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!