Benutzer-Werkzeuge

Webseiten-Werkzeuge


os4_unix_sed
                                      sed


 BACK ..

 arbeiten mit sed
 ================



 ERSETZEN einer Zeichenvolge:
 ----------------------------
 Es soll die Zeichenvolge [alt] gegen die Zeichenvolge [nagelneu] in der
 Datei [textgatei.txt] ausgetauscht werden:

 1. Moeglichkeit:
 # sed -e /alt/s//nagelneu/g textdatei.txt
 # sed 's/alt/nagelneu/g' textdatei.txt

 2. Moeglichkeit:
 # cat textdatei.txt | sed -e /alt/s//neu/g
 # cat textdatei.txt | sed 's/alt/neu/g'

 SED arbeitet in diesen Beispielen mit "regular expressions",
 unter FreeBSD ist eine Beschreibung unter "man re_format" vorhanden.



 sed mit Sprung:
 ---------------
 Hier arbeitet sed die "[Anweisung]" ab und beginnt sie anschliessen von neuem.
 # sed -e :a -e '[Anweisung];ta'

 Man kann auch mehrere Anweisungen nacheinander ausfuehren lassen:
 # sed -e :a -e '[Anweisung1];[Anweisung2];ta'



 selektiert Bereiche aus einer Datei:
 ------------------------------------
 Zeigt alles aus der Datei ab der ersten Leerzeile
 # cat [Datei] | sed -e '1,/^$/ d'

 Zeigt alles aus der Datei bis zur ersten Leerzeile
 # cat [Datei] | sed -e '/^$/ q'



 Beispiel:
 ---------
 Eine Liste mit den Laendercodes "iso 3166" soll umorganisiert werden:
 (hier wird auch awk verwendet)

 # cat iso3166.txt    (Im Beispiel nur die ersten 9 Zeilen.)

 AFGHANISTAN                                     AF      AFG     004
 ALBANIA                                         AL      ALB     008
 ALGERIA                                         DZ      DZA     012
 AMERICAN SAMOA                                  AS      ASM     016
 ANDORRA                                         AD      AND     020
 ANGOLA                                          AO      AGO     024
 ANGUILLA                                        AI      AIA     660
 ANTARCTICA                                      AQ      ATA     010
 ANTIGUA AND BARBUDA                             AG      ATG     028


 Die ersten 47 Zeichen werden in Anfuehrungszeichen gesetzt:
 sed -e 's/^.\{47\}/"&"/g'
 Das "Dach" steht fuer den Zeilenanfang, der Punkt steht fuer ein beliebiges
 Zeichen und in der geschweiften Klammer steht die Anzahl der beliebigen Zeichen.
 So wird nach 47 beliebibige Zeichen am Zeilenanfang gesucht, ist eine Zeile
 kuerzer als 47 Zeichen, wird diese Regel nicht aktiviert.

 Die Anfuehrungszeichen werden als Spaltentrennzeichen (field separator) verwendet,
 es werden die zweite und dritte Spalte in umgekehrter Reihenfolge ausgegeben
 (siehe auch "awk"):
 awk -F'"' '{print $3"      "$2}'

 Ein paar Zeilen haben am Ende noch zwei Leerzeichen, die abgeschnitten werden sollen,
 diese Anweisung schneidet all Leerzeichen am Ende einer Zeile ab:
 sed -e 's/\ *$//g'
 Das Leerzeichen bedeutet, es wird nach Leerzeichen gesucht.
 Der Stern steht fuer eine beliebige Anzahl (in diesem Fall) an Leerzeichen.
 Das Dollarzeichen steht fuer das Zeilenende.
 So wird nach einer beliebigen Anzahl an Leerzeichen gesucht, die am Zeilenende stehen.


 # cat iso3166.txt | sed -e 's/^.\{47\}/"&"/g' | awk -F'"' '{print $3"      "$2}' | sed -e 's/\ *$//g'

 AF      AFG     004      AFGHANISTAN
 AL      ALB     008      ALBANIA
 DZ      DZA     012      ALGERIA
 AS      ASM     016      AMERICAN SAMOA
 AD      AND     020      ANDORRA
 AO      AGO     024      ANGOLA
 AI      AIA     660      ANGUILLA
 AQ      ATA     010      ANTARCTICA
 AG      ATG     028      ANTIGUA AND BARBUDA


   [IMG]
/home/http/wiki/data/pages/os4_unix_sed.txt · Zuletzt geändert: von 127.0.0.1