Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sed(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

awk(1)

ed(1)

grep(1)

expressions(5)

sed(1)                                                               sed(1)

NAME
     sed - Editor im Prozedurbetrieb (stream editor)

SYNTAX
     sed [-n] [[-e] skript ...] [-f skriptdatei ...] [--] [datei ...]

BESCHREIBUNG
     sed ist ein nicht interaktiver, zeilenorientierter Editor mit ähnli-
     chem Funktionsumfang wie der auch zeilenorientierte, aber interaktive
     ed.

     sed eignet sich besonders, um

     -  mehrere globale Editierfunktionen effizient in einem Schritt durch-
        zuführen,

     -  die Ausgabe eines Kommandos über eine Pipeline auf einfache Weise
        zu editieren,

     -  eine Folge von Editierkommandos anzuwenden, die für die interaktive
        Eingabe zu kompliziert ist.

     sed liest Dateien sequentiell, bearbeitet die eingelesenen Zeilen ent-
     sprechend den sed-Kommandos, die Sie in ein sed-Skript geschrieben
     haben, und gibt die bearbeiteten Zeilen auf die Standardausgabe aus.
     sed liest das sed-Skript entweder von der Kommandoaufrufzeile oder aus
     einer Datei. Die Eingabedateien bleiben unverändert. Wenn Sie die
     Änderungen sichern möchten, lenken Sie die Standardausgabe in eine
     Datei um.

OPTIONEN
     -n   unterdrückt die standardmäßig erfolgende Ausgabe jeder bearbeite-
          ten Eingabezeile auf die Standardausgabe (siehe Beispiel 6).

          -n nicht angegeben:

          sed gibt jede bearbeitete Eingabezeile auf die Standardausgabe
          aus. Ob die Zeile bei der Bearbeitung verändert wurde oder nicht,
          hängt von den Kommandos im sed-Skript ab. Die Zeilen werden also
          auch ausgegeben, wenn im sed-Skript kein Ausgabekommando, wie
          z. B. p steht. Eingabezeilen, die mit einem Ausgabekommando, wie
          z. B. p bearbeitet werden, werden zweimal nacheinander ausgege-
          ben. Die erste Ausgabe erfolgt als standardmäßige Ausgabe aller
          bearbeiteten Zeilen. Die zweite Ausgabe erfolgt wegen der spe-
          ziellen Bearbeitung, die in diesem Fall die Ausgabe bewirkt.

     [-e] skript
          sed liest das sed-Skript skript, mit dem die Eingabedatei bear-
          beitet werden soll, von der Kommandoaufrufzeile. Wenn skript
          Leerzeichen, Neue-Zeile-Zeichen oder Shell-Sonderzeichen enthält,
          müssen Sie das Kommando in Hochkommas einschließen: 'skript'




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

          Sie können -e skript mehrmals und auch zusammen mit -f skriptda-
          tei angeben. sed liest dann die sed-Kommandos aus allen angegebe-
          nen sed-Skripts.

          Enthält die Kommandoaufrufzeile nur einmal die Option -e und
          nicht die Option -f, können Sie skript auch ohne -e angeben. Nach
          skript dürfen dann keine Optionen und kein -- mehr angegeben wer-
          den.

     -f skriptdatei
          sed liest das sed-Skript, mit dem die Eingabedatei bearbeitet
          werden soll, aus der Datei skriptdatei.

          Sie können -f skriptdatei mehrmals und auch zusammen mit -e
          skript angeben. sed liest dann die sed-Kommandos aus allen ange-
          gebenen sed-Skripts.

     --   Ende der Optionenliste. Die Angabe ist nötig, wenn datei mit -
          beginnt oder wenn skript mit - beginnt und -e nicht angegeben
          wurde.

     datei
          Name der Datei, deren Inhalt sed bearbeiten soll. Sie können nur
          Text-Dateien mit sed bearbeiten.

          datei nicht angegeben: sed liest von der Standardeingabe.

   Arbeitsweise

     sed arbeitet jeweils mit Kopien der Eingabezeilen. Sie werden nachein-
     ander in den sogenannten Musterspeicher kopiert.

     Normalerweise bearbeitet sed die Eingabezeilen in folgendem Zyklus:

     1. Schritt:  Die nächste (am Dateianfang die erste) Eingabezeile wird
                  in den Musterspeicher kopiert.

     2. Schritt:  Alle sed-Kommandos im sed-Skript, welche die zuletzt in
                  den Musterspeicher kopierte Zeile adressieren, werden
                  nacheinander auf den Inhalt des Musterspeichers ange-
                  wandt. Abhängig von den sed-Kommandos wird dabei der
                  Inhalt des Musterspeichers verändert oder auch nicht.

     3. Schritt:  Der bearbeitete Inhalt des Musterspeichers wird auf die
                  Standardausgabe ausgegeben, und der Musterspeicher wird
                  gelöscht.

     Dieser Zyklus wird solange durchlaufen, bis das Ende der Eingabe
     erreicht ist.





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     Der Musterspeicher kann manchmal auch mehrere Zeilen enthalten (siehe
     sed-Kommandos g, G, N). Als Adresse des Musterspeichers gilt jedoch
     immer die Adresse der zuletzt in den Musterspeicher kopierten Zeile.

     Einige sed-Kommandos (g, G, h, H) benutzen zusätzlich einen sogenann-
     ten Haltespeicher, in dem der Inhalt des Musterspeichers vollständig
     oder teilweise zur späteren Wiederverwendung gespeichert wird.

   Format eines sed-Skripts

     Ein sed-Skript besteht aus Kommandozeilen der Form:

     [bereich]sed-Kommando[parameter ...]

     oder

     [bereich]{sed-Kommando[parameter ...]

                sed-Kommando[parameter ...]

                        .
                        .
                        .

              }

     Die geschweiften Klammern müssen Sie nur angeben, wenn Sie bereich
     angeben.

     Die schließende geschweifte Klammer } muß an einem Zeilenanfang ste-
     hen, d. h. es dürfen ihr nur Leerzeichen oder Tabulatorzeichen voran-
     gehen.

     Zwischen bereich und sed-Kommando darf kein Leerzeichen stehen.

     Mit bereich wählen Sie bestimmte Eingabezeilen aus. Wenn bereich den
     Musterspeicher, d. h. die zuletzt in den Musterspeicher kopierte Ein-
     gabezeile adressiert, wird das zugehörige sed-Kommando bzw. die sed-
     Kommandoliste auf den Inhalt des Musterspeichers angewandt.

     Sie können für bereich eine Adresse oder zwei durch ein Komma
     getrennte Adressen angeben.

     bereich = adresse
          Jede zuletzt in den Musterspeicher kopierte Eingabezeile, die zu
          adresse paßt, ist adressiert.








Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     bereich = adresse1,adresse2
          Der Bereich von der durch adresse1 adressierten Eingabezeile bis
          zu der durch adresse2 adressierten Eingabezeile, einschließlich
          der Intervallgrenzen, ist adressiert. Adressiert adresse2 eine
          Zeile, die in der Eingabedatei vor der mit adresse1 adressierten
          Zeile liegt, gilt nur adresse1.

     bereich nicht angegeben:

     Jede zuletzt in den Musterspeicher kopierte Eingabezeile ist adres-
     siert.

   Adressen

     ______________________________________________________________________
    | Adresse  |  Bedeutung                                               |
    |__________|__________________________________________________________|
    | $        |  letzte Zeile der Datei                                  |
    |__________|__________________________________________________________|
    | n        |  n-te Eingabezeile, wobei n eine positive ganze Zahl ist.|
    |          |  Die Nummern ergeben sich, indem alle Eingabezeilen fort-|
    |          |  laufend durchnumeriert werden.                          |
    |__________|__________________________________________________________|
    | /muster/ |  Eingabezeile, die eine zu muster passende Zeichenkette  |
    |          |  enthält. Wenn muster selbst einen Schrägstrich enthält, |
    |          |  muß er mit einem Gegenschrägstrich \ davor entwertet    |
    |          |  werden. muster ist ein einfacher regulärer Ausdruck     |
    |          |  [siehe expressions(5)] mit folgenden Änderungen:        |
    |          |                                                          |
    |          |  Die Angabe \?regulärerausdruck?, wobei ? ein beliebiges|
    |          |  Zeichen ist, ist gleichbedeutend mit                    |
    |          |  /regulärerausdruck/. Dabei steht ein mit einem Gegen-  |
    |          |  schrägstrich \ entwertetes ? für sich selbst, begrenzt  |
    |          |  also nicht den regulären Ausdruck. Zum Beispiel steht   |
    |          |  die Adresse \xabc\xdefx für die Zeichenkette: abcxdef   |
    |          |                                                          |
    |          |  Die Escape-Sequenz \n paßt zum Neue-Zeile-Zeichen im    |
    |          |  Musterspeicher.                                         |
    |          |                                                          |
    |          |  Ein Punkt paßt zu jedem Zeichen außer dem letzten Neue- |
    |          |  Zeile-Zeichen im Musterspeicher.                        |
    |__________|__________________________________________________________|












Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

   sed-Kommandos

     Im folgenden sind die sed-Kommandos in alphabetischer Reihenfolge
     beschrieben. Die eckigen Klammern [ ] sind dabei nicht einzugeben! Sie
     zeigen lediglich an, daß die dazwischen eingeschlossene Adreßangabe
     fakultativ ist.

     Das Argument text besteht aus einer oder mehreren Zeilen, von denen
     alle bis auf die letzte mit einem Gegenschrägstrich \ enden müssen, um
     das anschließende Neue-Zeile-Zeichen zu entwerten.

     [adresse]a\
     text
          (a - append) Im Anschluß an die Ausgabe des Inhalts des Muster-
          speichers wird text ausgegeben.

     [bereich]b[marke]
          (b - branch) Im sed-Skript wird zu dem sed-Kommando :marke ver-
          zweigt.

          marke nicht angegeben: Es wird ans Ende des sed-Skripts ver-
          zweigt.

     [bereich]c\
     text
          (c - change) Der adressierte Bereich wird gelöscht, wenn er im
          Musterspeicher ist, text wird ausgegeben und der nächste Zyklus
          wird gestartet.

     [bereich]d
          (d - delete) Der Inhalt des Musterspeichers wird gelöscht und der
          nächste Zyklus wird gestartet. Der 3. Schritt, die Ausgabe des
          Inhalts des Musterspeichers, entfällt.

     [bereich]D
          (d - delete) Der Inhalt des Musterspeichers wird vom Anfang bis
          zum ersten Neue-Zeile-Zeichen gelöscht und der nächste Zyklus
          wird gestartet.

     [bereich]g
          Der Inhalt des Haltespeichers ersetzt den Inhalt des Musterspei-
          chers.

     [bereich]G
          Der Inhalt des Haltespeichers wird an den Musterspeicher ange-
          fügt.

     [bereich]h
          Der Inhalt des Musterspeichers ersetzt den Inhalt des Haltespei-
          chers.




Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     [bereich]H
          Der Inhalt des Musterspeichers wird an den Haltespeicher ange-
          fügt.

     [adresse]i\
     text
          (i - insert) text wird vor dem Inhalt des Musterspeichers ausge-
          geben.

     [bereich]l
          (l - list) Der Inhalt des Musterspeichers wird auf die Standard-
          ausgabe ausgegeben, wobei nicht-druckbare Zeichen durch Ersatz-
          Zeichen (z. B. Tabulatorzeichen; siehe ed-Kommando l) oder als
          Oktalzahlen in der Form \nn dargestellt werden. Überlange Zeilen
          mit mehr als 71 Zeichen werden auf zwei oder mehr Zeilen unter-
          teilt. Ein Gegenschrägstrich \ am Ende einer Bildschirmzeile
          zeigt an, daß die Textzeile in der nächsten Bildschirmzeile fort-
          gesetzt wird. Jedes Zeilenende wird mit $ gekennzeichnet.

     [bereich]n
          (n - next) Der Inhalt des Musterspeichers wird auf die Standard-
          ausgabe ausgegeben und durch die nächste Eingabezeile ersetzt.
          Die Adresse der eingegebenen Zeile wird zur Adresse des Muster-
          speichers.

     [bereich]N
          Die nächste Eingabezeile wird einschließlich des Neue-Zeile-
          Zeichens an den Inhalt des Musterspeichers angefügt. Die Adresse
          der letzten angefügten Zeile wird zur Adresse des Musterspei-
          chers.

     [bereich]p
          (p - print) Der Inhalt des Musterspeichers wird auf die Standard-
          ausgabe ausgegeben. Nicht druckbare Zeichen werden nicht darge-
          stellt.

     [bereich]P
          (p - print) Der Anfang des Musterspeichers wird bis zum ersten
          Neue-Zeile-Zeichen einschließlich auf die Standardausgabe ausge-
          geben. Nicht druckbare Zeichen werden nicht dargestellt.

     [adresse]q
          (q - quit) sed wird beendet. Haben Sie mehrere sed-Skripts ange-
          geben, wird sed beim ersten q beendet, das in irgendeinem der
          Skripts steht.

     [bereich]r rdatei
          (r - read) Der Inhalt der Datei rdatei wird gelesen und vor dem
          Kopieren der nächsten Eingabezeile in den Musterspeicher auf die
          Standardausgabe ausgegeben. rdatei muß, durch genau ein Leerzei-
          chen vom sed-Kommando r getrennt, am Ende der Kommandozeile ste-
          hen.


Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     [bereich]s/rA/ersetzungszeichenkette/[parameter]
          (s - substitute) Zeichenketten im Musterspeicher, zu denen der
          reguläre Ausdruck rA paßt, werden durch ersetzungszeichenkette
          ersetzt. Für rA können Sie einfache reguläre Ausdrücke angeben
          [siehe expressions(5)]. Als Trennzeichen können Sie außer dem
          Schrägstrich / jedes beliebige Zeichen verwenden. Nähere Informa-
          tionen siehe ed-Kommando s.

          parameter

          n    (n - number) Nur die n-te zu rA passende Zeichenkette in
               einer Zeile wird durch ersetzungszeichenkette ersetzt.

          g    (g - global) Alle zu rA passenden Zeichenketten in einer
               Zeile werden durch ersetzungszeichenkette ersetzt.

          p    (p - print) Der Inhalt des Musterspeichers wird auf die
               Standardausgabe ausgegeben, falls eine Ersetzung durchge-
               führt wurde, auch wenn sed mit Option -n aufgerufen wurde.

          w wdatei
               (w - write) Der Inhalt des Musterspeichers wird in die Datei
               wdatei geschrieben, falls eine Ersetzung durchgeführt wurde.
               Der Inhalt einer bereits vor dem sed-Aufruf existierenden
               Datei mit dem Namen wdatei wird überschrieben. Wenn inner-
               halb eines sed-Skripts mehrere w-Kommandos in dieselbe Datei
               wdatei schreiben, wird der Inhalt des Musterspeichers
               jeweils an den Inhalt von wdatei angehängt. wdatei muß,
               durch genau ein Leerzeichen vom sed-Kommando w getrennt, am
               Ende der Kommandozeile stehen. In einem sed-Aufruf dürfen
               Sie maximal 10 verschiedene Dateien für wdatei verwenden.

               Vorsicht:  Wenn Sie für wdatei den Namen Ihrer Eingabedatei
                          angeben, zerstören Sie diese!

          parameter nicht angegeben:

          Nur die erste zu rA passende Zeichenkette einer Zeile wird durch
          ersetzungszeichenkette ersetzt.

     [bereich]tmarke
          (t -test) Im sed-Skript wird zu dem sed-Kommando :marke ver-
          zweigt, falls seit dem letzten Kopieren einer Eingabezeile in den
          Musterspeicher oder dem letzten Aufrufen eines t-Kommandos eine
          Ersetzung durchgeführt wurde.

          marke nicht angegeben: Im sed-Skript wird ans Ende gesprungen.







Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     [bereich]w wdatei
          (w - write) Der Inhalt des Musterspeichers wird in die Datei
          wdatei geschrieben. Der Inhalt einer bereits vor dem sed-Aufruf
          existierenden Datei mit dem Namen wdatei wird überschrieben. Wenn
          innerhalb eines sed-Skripts mehrere w-Kommandos in dieselbe Datei
          wdatei schreiben, wird der Inhalt des Musterspeichers jeweils an
          den Inhalt von wdatei angehängt. wdatei muß, durch genau ein
          Leerzeichen vom sed-Kommando w getrennt, am Ende der Kommando-
          zeile stehen. In einem sed-Aufruf dürfen Sie maximal 10 verschie-
          dene Dateien für wdatei verwenden.

          Vorsicht:  Wenn Sie für wdatei den Namen Ihrer Eingabedatei ange-
                     ben, zerstören Sie diese!

     [bereich]x
          (x - exchange) Der Inhalt des Muster- und Haltespeichers wird
          ausgetauscht.

     [bereich]y/zeichenkette1/zeichenkette2/
          Jedes Vorkommen eines Zeichens aus zeichenkette1 wird durch das
          entsprechende Zeichen aus zeichenkette2 ersetzt. zeichenkette1
          und zeichenkette2 müssen gleich lang sein und explizit angegeben
          werden. Reguläre Ausdrücke können nicht verwendet werden.

     [bereich]!kommando
          kommando ist ein sed-Kommando oder eine in geschweiften Klammern
          {...} eingeschlossene sed-Kommandoliste und wird auf alle Zeilen
          angewandt, die nicht durch bereich adressiert sind.

     :marke
          Dieses Kommando setzt im Skript die marke, die von den Kommandos
          b und t angesprungen werden kann. Für marke können Sie bis zu 8
          Zeichen angeben.

     [adresse]=
          Die aktuelle Zeilennummer wird auf die Standardausgabe in einer
          eigenen Zeile ausgegeben.

     [bereich]{sed-Kommando
                   sed-Kommando
                   .
                   .
                   .
              }

          Die in geschweiften Klammern {...} eingeschlossenen sed-Kommandos
          werden nacheinander ausgeführt, wenn bereich den aktuellen
          Musterspeicher adressiert. Die schließende Klammer } muß am Zei-
          lenanfang stehen. Es dürfen ihr nur Leerzeichen und Tabulatorzei-
          chen vorausgehen.




Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     <RETURN>
          Das Neue-Zeile-Zeichen gilt als leeres Kommando und wird igno-
          riert. Sie können so Ihre sed-Skripts durch Leerzeilen übersicht-
          lich gliedern.

     #    Steht in einer Skriptdatei als erstes Zeichen in einer Zeile ein
          #, wird der darauffolgende Zeileninhalt als Kommentar interpre-
          tiert.

     #n   Steht in einer Skriptdatei als erstes Zeichen ein #n, wird die
          standardmäßige Ausgabe des Musterspeichers unterdrückt (ent-
          spricht der Option -n). Der auf #n folgende Zeileninhalt wird als
          Kommentar gewertet und nicht als sed-Kommando interpretiert.

FEHLERMELDUNGEN
     sed: command garbled: ...

     Das sed-Skript enthält einen Syntaxfehler. Nach dem Doppelpunkt wird
     die Stelle aus dem Skript ausgegeben, an der sich sed beendet hat.

     Can't open datei

     Sie haben eine Eingabedatei angegeben, die nicht existiert oder für
     die Sie kein Leserecht besitzen.

     Unrecognized command: ...

     Das sed-Skript enthält ein unbekanntes Kommando.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte.

     In geklammerten regulären Ausdrücken bestimmt die Umgebungsvariable
     LCCOLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und
     Zeicheneinheiten, die Umgebungsvariable LCCTYPE die Bedeutung von
     Zeichenklassen. LCCTYPE bestimmt zusätzlich, welche Zeichen bei Ver-
     wendung des Kommandos l als nichtdruckbar betrachtet werden.

     Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
     chenkette definiert ist, wird der Wert von LANG als Standardwert für
     die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.

     Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
     bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
     Bereich der Internationalisierung.

     Hat eine der Variablen für die internationale Umgebung einen ungülti-
     gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.



Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

BEISPIELE
     Beispiel 1

     In alle Leerzeilen einer Datei die Zeichenkette XXXXX schreiben und
     die Ausgabe in eine andere Datei umlenken:

     $ sed '/^$/s/^/XXXXX/' datei > dateineu

     Mit /^$/ sind alle Leerzeilen adressiert, d. h. Zeilen, in denen zwi-
     schen Zeilenanfang und Zeilenende nichts, auch kein Leerzeichen,
     steht. sed sucht nach dem Zeilenanfang ^ und ersetzt ihn durch die
     Zeichenkette XXXXX.

     Beispiel 2

     Alle Zeilen einer Datei, die mit einer Ziffer beginnen, um 4 Leerzei-
     chen einrücken und die Ausgabe in eine andere Datei umlenken:

     $ sed '/^[0-9]/s/^/<blank><blank><blank><blank>/' datei > dateineu

     Mit /^[0-9]/ sind alle Zeilen adressiert, in denen am Zeilenanfang
     eine Ziffer von 0 bis 9 einschließlich steht. sed sucht nach dem Zei-
     lenanfang ^ und ersetzt ihn durch 4 Leerzeichen
     <blank><blank><blank><blank>, d. h. verschiebt den bisherigen Zeilen-
     inhalt um 4 Positionen nach rechts und füllt Position 1 bis 4 mit
     Leerzeichen.

     Beispiel 3

     Alle Zeilen einer Datei ausgeben, die keine Leerzeilen sind:

     $ sed '/^$/d' datei

     Alle Leerzeilen werden mit /^$/ adressiert und mit d gelöscht.

     Beispiel 4

     Alle Zeilen einer Datei mit jeweils einer Leerzeile dazwischen ausge-
     ben:

     $ sed 's/$/\ <CR>
     > /' datei

     Da keine Adresse angegeben ist, sucht sed in jeder Zeile nach dem Zei-
     lenende $ und ersetzt es durch ein Neue-Zeile-Zeichen <CR>, d. h. es
     wird ein zusätzliches Neue-Zeile-Zeichen eingefügt.








Seite 10                     Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     Beispiel 5

     Ausgeben der zweiten und dritten Spalte einer Datei, deren Spalten
     jeweils durch einen Doppelpunkt voneinander getrennt sind. Die dritte
     Spalte soll vor der zweiten ausgegeben werden:

     $ sed 's/[^:]*:\([^:]*\):\([^:]*\):.*/\2:\1/' datei

     Erläuterung:

     s/   /    /
          In jeder Zeile wird die Zeichenkette zwischen dem ersten und
          zweiten Schrägstrich gesucht und ersetzt durch die Zeichenkette
          zwischen dem zweiten und dritten Schrägstrich.

     [^:]*
          Beliebig viele (*) Zeichen außer Doppelpunkt ([^:]).

     :    Doppelpunkt.

     \(  \)
          Klammerung eines Teilausdrucks, der in der Ersetzungszeichenkette
          zwischen dem zweiten und dritten Schrägstrich wiederverwendet
          werden soll.

     \2   Die Ersetzungszeichenkette soll mit dem in der zweiten Klammer
          \(...\) stehenden Teilausdruck beginnen.

     :    Zwischen dem ersten und zweiten Teilausdruck in der Ersetzungs-
          zeichenkette soll ein Doppelpunkt stehen.

     \1   Die Ersetzungszeichenkette soll mit dem in der ersten Klammer
          \(...\) stehenden Teilausdruck enden.

     Beispiel 6

     Aus der Datei pers alle Berufe herausfiltern und mit einer neuen Über-
     schrift in die Datei berufe schreiben. Voraussetzung für das folgende
     Beispiel ist, daß die erste Zeile der Eingabedatei keinen Suchbegriff,
     in diesem Fall "Beruf:" enthält.

     Die Datei pers hat folgenden Aufbau:

     Name: Hans Mueller
     Familienstand: geschieden
     Beruf: Journalist

     Name: Karin Becker
     Familienstand: verheiratet
     Beruf: Programmiererin
     usw.



Seite 11                     Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     sed-Programm:

     $ sed -n '1{s/^.*/Berufe:/
                 h
                }

               /^Beruf:/{s/^Beruf: *\(.*\)/\1/
                         H
                }

               ${g
                 p
                }' pers > berufe

     $ cat berufe
     Berufe:
     Journalist
     Programmiererin
     usw.
     $

     Erläuterung:

     Zeile 1 im Musterspeicher wird ersetzt durch die Zeichenkette Berufe:
     und dann mit h in den Haltespeicher geschrieben.

     Jede Zeile im Musterspeicher, die mit Beruf: beginnt, wird ersetzt
     durch die Zeichenkette, die jeweils darauf folgt und mit H an den Hal-
     tespeicher angefügt.

     Die letzte Zeile der Datei im Musterspeicher ($) wird mit g ersetzt
     durch den gesamten Inhalt des Haltespeichers. Mit p wird der Inhalt
     des Musterspeichers ausgegeben.

     Die Option -n sorgt dafür, daß die in den Musterspeicher kopierten
     Eingabezeilen nach ihrer Bearbeitung nicht automatisch auf die Stan-
     dardausgabe geschrieben werden. Nur der mit dem sed-Kommando p bear-
     beitete Inhalt des Musterspeichers wird ausgegeben.

     Beispiel 7

     Die Datei protocol hat folgenden Inhalt:

     First Line
     RCS file:        RCS/awk,v;   Working file:    awk
     head:            1.8
     locks:           ;  strict
     symbolic names:  Y4A0010: 1.8;  N4A0010: 1.8;  Y3C1001: 1.7;
     comment leader:  "# "
     total revisions: 8;    selected revisions: 8
     ----------------------------
     Last Line


Seite 12                     Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     Mit einem sed-Skript namens cutoff sollen

     1) alle Zeilen zwischen der Zeile First Line und der Zeile Last Line
        entfernt werden;

     2) vor die Zeile First Line eine neue Zeile BEGIN eingesetzt werden;

     3) nach der Zeile Last Line eine neue Zeile END angehängt werden.

     Das Skript cutoff hat folgenden Inhalt:

     #!/usr/bin/ksh
     # Call: cutoff $1

           f=$1
           echo $f

     {
             sed '/^RCS *\(.*\)/,/^----------------------------/d
            /^First Line/i\
     BEGIN
            /^Last Line/a\
     END
          ' $f
             } > $f.out
     mv $f.out $f

     Erläuterung:

     Die Anweisung

          /^RCS *\(.*\)/,/^----------------------------/d

     markiert den Bereich, der gelöscht werden soll. Er beginnt mit einer
     Zeile, die mit RCS beginnt, gefolgt von beliebigen Zeichenketten [=
     *\(.*\)]. Der zu löschende Bereich endet mit der Zeile, die mit der
     Zeichenkette ---------------------------- anfängt. Diese beiden Zeilen
     sowie alle Zeilen, die dazwischen liegen, werden gelöscht (delete).

     Die Anweisung

               /^First Line/i\
          BEGIN

     setzt vor eine Zeile, die mit First Line beginnt, eine Zeile mit der
     Zeichenkette BEGIN ein (insert).

     Die Anweisung

               /^Last Line/a\
          END



Seite 13                     Reliant UNIX 5.44               Gedruckt 11/98

sed(1)                                                               sed(1)

     fügt nach einer Zeile, die mit Last Line beginnt, eine Zeile mit der
     Zeichenkette END an (add).

     Nachdem das Skript cutoff ausgeführt worden ist, hat die Datei
     protocol folgenden Inhalt:

     BEGIN
     First Line
     Last Line
     END

SIEHE AUCH
     awk(1), ed(1), grep(1), expressions(5).









































Seite 14                     Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026