Sed: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Grundlegendes=
 
=Grundlegendes=
sed steht für Stream EDitor und ist ein Unix-Werkzeug, mit dem Text-Datenströme bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem Texteditor wird die Ursprungsdatei aber nicht verändert.
+
sed steht für '''S'''tream '''ED'''itor und ist ein Unix-Werkzeug, mit dem Text-Datenströme bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem Texteditor wird die Ursprungsdatei aber nicht verändert.
  
 
Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem vi, wird sed mittels eines Skripts gesteuert.
 
Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem vi, wird sed mittels eines Skripts gesteuert.
  
 
Der sed-Befehlssatz orientiert sich an jenem des zeilenorientierten Texteditors ed. Dabei werden für die Text-Durchmusterung laut der POSIX-Spezifikation eine bestimmte Abart der Regular Expressions, sogenannte (POSIX-) Basic Regular Expressions (BRE) verwendet.
 
Der sed-Befehlssatz orientiert sich an jenem des zeilenorientierten Texteditors ed. Dabei werden für die Text-Durchmusterung laut der POSIX-Spezifikation eine bestimmte Abart der Regular Expressions, sogenannte (POSIX-) Basic Regular Expressions (BRE) verwendet.
 +
 
=Arbeitsweise=
 
=Arbeitsweise=
 
sed kann sowohl innerhalb einer Pipeline als auch auf Dateien arbeiten. Ausgaben erfolgen grundsätzlich auf <stdout>, Fehlermeldungen auf <stderr>.
 
sed kann sowohl innerhalb einer Pipeline als auch auf Dateien arbeiten. Ausgaben erfolgen grundsätzlich auf <stdout>, Fehlermeldungen auf <stderr>.
=Test Dateil=
+
=Test Datei=
 
*cat test.dat  
 
*cat test.dat  
 
  Erwin Ruediger  
 
  Erwin Ruediger  
Zeile 14: Zeile 15:
 
  Tanja Michaela  
 
  Tanja Michaela  
 
  Olga Tanja Frieda
 
  Olga Tanja Frieda
 +
Hans Meier
 +
Franz Maier
 +
Otto Mayer
 +
Rudi Meyer
 +
 
=Beispiele=
 
=Beispiele=
 +
==Suchen und ersetzen==
 
;Ersetze in jeder Zeile das erste Erwin durch Peter
 
;Ersetze in jeder Zeile das erste Erwin durch Peter
 
*sed "s/Erwin/Peter/" test.dat
 
*sed "s/Erwin/Peter/" test.dat
Zeile 23: Zeile 30:
 
;Ersetze in jeder Zeile Erwin am Zeilenende durch Peter
 
;Ersetze in jeder Zeile Erwin am Zeilenende durch Peter
 
*sed "s/Erwin$/Peter/g" test.dat
 
*sed "s/Erwin$/Peter/g" test.dat
 +
;Ersetze in von der 2. bis zur 3. Zeile Erwin am Zeilenende durch Peter
 +
*sed "2,3s/Erwin$/Peter/" test.dat
 +
;Ersetze von der Zeile die mit Karl beginnt bis zur Zeile die mit Michael anfängt Erwin durch Peter
 +
*sed "/^Karl/,/^Michael/s/Erwin/Peter/" test.dat
 +
;Ersetze Michael durch Marc nicht Michaela (Wortende)
 +
*sed "s/Michael\>/Marc/" test.dat
 +
;Füge zu Karl -Heinz hinzu
 +
*sed "s/Karl/&-Heinz/" test.dat
 +
;Ersetze alle Schreibweisen von Meier durch Müller
 +
*sed "s/M[ea][yi]er/Müller/" test.dat
 +
;Stelle bei allen Meiervarianten den Nachnamen vor den Vornamen
 +
*sed "s/^\([A-Z][a-z]\+\) \(M[ea][yi]er\)/\2 \1/" test.dat
 +
==Text anhängen, hinzufügen, überschreiben, löschen==
 +
;Füge nach der 3 Stelle Text ein
 +
*sed -e "3a\#bla bla bla "  test.dat
 +
;Hänge nach jeder Zeile mit Erwin Text an
 +
*sed -e "/Erwin/a\In der Zeile drüber steht Erwin "  test.dat
 +
;Füge vor jeder Zeile mit Erwin Text hinzu
 +
*sed -e "/Erwin/i\In der Zeile drunter steht Erwin "  test.dat
 +
;Zeilen mit Erwin werden überschrieben
 +
*sed -e "/Erwin/c\Hier ruht Erwin"  test.dat
 +
;Alle Zeilen mit Erwin löschen
 +
*sed -e "/Erwin/d"  test.dat
 +
 +
==Ausgewählte Optionen==
 +
;-n unterdrückt die Ausgabe und p sorgt dafür das die Zeilen die verändert wurden angezeigt werden
 +
*sed -n "s/Karl/Charlie/p"
 +
;Mehrere Durchgänge
 +
*sed -e "s/Karl/Charlie/" -e "s/Olga/Svenja/" test.dat
 +
;Editierfunktionen in eigene Datei auslagen
 +
*cat such.conf
 +
s/Karl/Charlie/
 +
s/Olga/Svenja/
 +
*sed -f such.conf  test.dat
 +
 +
= Optionen =
 +
 +
* s => subtitute
 +
* g => global: mehrmals in der Zeile ersetzen
 +
 +
= Aufgaben =
 +
 +
* [[Aufgaben zu: sed]]
  
 
=Links=
 
=Links=
 
*https://de.wikipedia.org/wiki/Sed_(Unix)
 
*https://de.wikipedia.org/wiki/Sed_(Unix)
 
*https://wiki.ubuntuusers.de/sed/
 
*https://wiki.ubuntuusers.de/sed/

Aktuelle Version vom 18. Juni 2024, 13:52 Uhr

Grundlegendes

sed steht für Stream EDitor und ist ein Unix-Werkzeug, mit dem Text-Datenströme bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem Texteditor wird die Ursprungsdatei aber nicht verändert.

Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem vi, wird sed mittels eines Skripts gesteuert.

Der sed-Befehlssatz orientiert sich an jenem des zeilenorientierten Texteditors ed. Dabei werden für die Text-Durchmusterung laut der POSIX-Spezifikation eine bestimmte Abart der Regular Expressions, sogenannte (POSIX-) Basic Regular Expressions (BRE) verwendet.

Arbeitsweise

sed kann sowohl innerhalb einer Pipeline als auch auf Dateien arbeiten. Ausgaben erfolgen grundsätzlich auf <stdout>, Fehlermeldungen auf <stderr>.

Test Datei

  • cat test.dat
Erwin Ruediger 
Karl Erwin
Michael Rudi Erwin Karl Erwin
Tanja Michaela 
Olga Tanja Frieda
Hans Meier
Franz Maier
Otto Mayer
Rudi Meyer

Beispiele

Suchen und ersetzen

Ersetze in jeder Zeile das erste Erwin durch Peter
  • sed "s/Erwin/Peter/" test.dat
Ersetze in jeder Zeile jedes Erwin durch Peter
  • sed "s/Erwin/Peter/g" test.dat
Ersetze in jeder Zeile Erwin am Zeilenanfang durch Peter
  • sed "s/^Erwin/Peter/g" test.dat
Ersetze in jeder Zeile Erwin am Zeilenende durch Peter
  • sed "s/Erwin$/Peter/g" test.dat
Ersetze in von der 2. bis zur 3. Zeile Erwin am Zeilenende durch Peter
  • sed "2,3s/Erwin$/Peter/" test.dat
Ersetze von der Zeile die mit Karl beginnt bis zur Zeile die mit Michael anfängt Erwin durch Peter
  • sed "/^Karl/,/^Michael/s/Erwin/Peter/" test.dat
Ersetze Michael durch Marc nicht Michaela (Wortende)
  • sed "s/Michael\>/Marc/" test.dat
Füge zu Karl -Heinz hinzu
  • sed "s/Karl/&-Heinz/" test.dat
Ersetze alle Schreibweisen von Meier durch Müller
  • sed "s/M[ea][yi]er/Müller/" test.dat
Stelle bei allen Meiervarianten den Nachnamen vor den Vornamen
  • sed "s/^\([A-Z][a-z]\+\) \(M[ea][yi]er\)/\2 \1/" test.dat

Text anhängen, hinzufügen, überschreiben, löschen

Füge nach der 3 Stelle Text ein
  • sed -e "3a\#bla bla bla " test.dat
Hänge nach jeder Zeile mit Erwin Text an
  • sed -e "/Erwin/a\In der Zeile drüber steht Erwin " test.dat
Füge vor jeder Zeile mit Erwin Text hinzu
  • sed -e "/Erwin/i\In der Zeile drunter steht Erwin " test.dat
Zeilen mit Erwin werden überschrieben
  • sed -e "/Erwin/c\Hier ruht Erwin" test.dat
Alle Zeilen mit Erwin löschen
  • sed -e "/Erwin/d" test.dat

Ausgewählte Optionen

-n unterdrückt die Ausgabe und p sorgt dafür das die Zeilen die verändert wurden angezeigt werden
  • sed -n "s/Karl/Charlie/p"
Mehrere Durchgänge
  • sed -e "s/Karl/Charlie/" -e "s/Olga/Svenja/" test.dat
Editierfunktionen in eigene Datei auslagen
  • cat such.conf
s/Karl/Charlie/
s/Olga/Svenja/
  • sed -f such.conf test.dat

Optionen

  • s => subtitute
  • g => global: mehrmals in der Zeile ersetzen

Aufgaben

Links