Matthias Scherrer >>SED

Unix, Open Source, News & other random stuff...

* under construction
 

Inhalt:

1. Einleitung

Diese Beschreibung richtet sich nicht an den sed Anfänger, sondern an Fortgeschrittene. RegExps sollten geläufig sein.

2. Funktionsweise SED

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.

3. Kommandoübersicht

Abkürzungen:
KommandoBeschreibung
PPattern space
HHold space
\nNewline
[adr]Address, z.B: 1,$ | 4,12 | 5 | /a/,/b/ | /BEGIN/
goto beginhole 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
}

3.1 Basic Kommandos

KommandoBeschreibung
pPrint P
lPrint P mit Steuerzeichen = debug Funktion
=Print Zeilennummer
PPrint P bis zum 1. \n
dDelete P, goto begin
DDelete P bis zum 1. \n , goto begin
nPrint (wenn -n nicht angegeben wurde) und lösche P (goto begin)
Nlese nächste Zeile und füge sie an P an (mit \n dazwischen)
[adr]a/textAppend text
[adr]i/textInsert text
[adr]c/textChange text

3.2 Pattern/Hold Space

KommandoBeschreibung
gKopiert H nach P
hKopiert P nach H
GAppend: P = P + H
HAppend: H = H + P
xVertauscht P und H

3.3 Verzweigung

KommandoBeschreibung
t labelVerzweige nach label, wenn Substitution (s/.../.../) erfolgreich
b labelVerzweige nach label
b Verzweige an das Ende des Scripts
q Quit das sed Script ohne Ausgabe
:labelKennzeichne label

3.4 Diverses

KommandoBeschreibung
sSubstituiere
yTranslate (ähnlich Unix tr Kommando)
rLese von einer Datei nach stdout
wSchreibe Zeilen in eine Datei
;Trennen mehrere Kommandos auf einer Zeile
#Kommentarzeile (funktioniert nicht mit allen sed Implementierungen)

4. Beispiele

4.1 Aufbereitung einer Konfigdatei

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.

4.2 tree: Baumartige Ausgabe der Directory Struktur

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


This page last updated on Sat Jun 28 19:58:58 CEST 2003
Copyright © 2002 Matthias Scherrer. All rights reserved.
Valid HTML 4.01! Seitenanfang