|
* under construction
|
|
Inhalt:
Diese Beschreibung richtet sich nicht an den sed Anfänger,
sondern an Fortgeschrittene. RegExps sollten geläufig sein.
Der sed besitzt ein Hold-Space (H) und ein Pattern-Space (P).
Die 1. Zeile wird nach P kopiert. P kann nun mit den sed Kommandos
verändert werden. Sobald P leer ist, oder das letzte sed Kommando
abgearbeitet wurde, wird die nächste Zeile in P eingelesen und das Script
wird wieder von vorne abgearbeitet.
H wird als Zwischenspeicher benutzt.
Abkürzungen:
| Kommando | Beschreibung |
| P | Pattern space |
| H | Hold space |
| \n | Newline |
| [adr] | Address, z.B: 1,$ | 4,12 | 5 | /a/,/b/ | /BEGIN/ |
| goto begin | hole nächste Zeile in P und fange Script von vorne an |
Generelle sed Form:
[address[,address]][!]command [arguments]
Das Ausrufezeichen (!) dient als "reverse" bzw. "not".
Mit den geschweiften Klammern kann man mehrere Kommandos zu einem Block
zusammenfassen:
[/pattern/[,/pattern/]]{
command1
command2
}
| Kommando | Beschreibung |
| p | Print P |
| l | Print P mit Steuerzeichen = debug Funktion |
| = | Print Zeilennummer |
| P | Print P bis zum 1. \n |
| d | Delete P, goto begin |
| D | Delete P bis zum 1. \n , goto begin |
| n | Print (wenn -n nicht angegeben wurde) und lösche P (goto begin) |
| N | lese nächste Zeile und füge sie an P an (mit \n dazwischen) |
| [adr]a/text | Append text |
| [adr]i/text | Insert text |
| [adr]c/text | Change text |
| Kommando | Beschreibung |
| g | Kopiert H nach P |
| h | Kopiert P nach H |
| G | Append: P = P + H |
| H | Append: H = H + P |
| x | Vertauscht P und H |
| Kommando | Beschreibung |
| t label | Verzweige nach label, wenn Substitution (s/.../.../) erfolgreich |
| b label | Verzweige nach label |
| b | Verzweige an das Ende des Scripts |
| q | Quit das sed Script ohne Ausgabe |
| :label | Kennzeichne label |
| Kommando | Beschreibung |
| s | Substituiere |
| y | Translate (ähnlich Unix tr Kommando) |
| r | Lese von einer Datei nach stdout |
| w | Schreibe Zeilen in eine Datei |
| ; | Trennen mehrere Kommandos auf einer Zeile |
| # | Kommentarzeile (funktioniert nicht mit allen sed Implementierungen) |
Damit eine Datei besser besser mit einem Parser verarbeitet werden kann,
wird sie vereinfacht, d.h:
- Kommentare (beginnend mit #) gelöscht
- Leerzeilen entfernt
- Zeilen, welche mit \ aufhören mit der nächsten Zeile zusammengefügt
- Mehrere aufeinanderfolgende Spaces bzw. Tabs durch ein Space ersetzt
s/#.*$//
:loop
/\\$/{
s/\\$//
N
b loop
}
s/\n//g
s/[ ][ ]*/ /g
s/ $//
Bemerkung: [ ]
als [<SPACE><TAB>]
eingeben.
find . | sed -e 's/[^\/]*\//|----/g' -e 's/---- |/ |/g'
Beispielausgabe:
|---- iptables-1.2.7a
| |---- KNOWN_BUGS
| |---- COPYING
| |---- INSTALL
| |---- extensions
| | |---- libipt_recent.c
| | |---- .BALANCE-test
| | |---- .CONNMARK-test
| | |---- .FTOS-test
|