Sed/Dateien ergänzen

Aus Foxwiki
Version vom 31. März 2023, 11:53 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Dateien ergänzen == === Zeile am Dateianfang einfügen === Dies ist auch ohne sed möglich, zum Beispiel mit Hilfe von echo und cat cat - <<< "Anfang" sed-test.txt > sed-test2.txt echo "Anfang" | cat - sed-test.txt > sed-test2.txt echo "Anfang" > sed-test2.txt; cat sed-test.txt >> sed-test2.txt Mit Hilfe von sed geht dies eleganter. sed '1iAnfang' < sed-test.txt > sed-test2.txt * 1=Zeile 1 (explizite Bereichsauswahl) * i=insert-Befehl === Ze…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Dateien ergänzen[Bearbeiten | Quelltext bearbeiten]

Zeile am Dateianfang einfügen[Bearbeiten | Quelltext bearbeiten]

Dies ist auch ohne sed möglich, zum Beispiel mit Hilfe von echo und cat

cat - <<< "Anfang" sed-test.txt > sed-test2.txt
echo "Anfang" | cat - sed-test.txt > sed-test2.txt
echo "Anfang" > sed-test2.txt; cat sed-test.txt >> sed-test2.txt

Mit Hilfe von sed geht dies eleganter.

sed '1iAnfang' < sed-test.txt > sed-test2.txt
* 1=Zeile 1 (explizite Bereichsauswahl)
* i=insert-Befehl

Zeile innerhalb des Textes einfügen[Bearbeiten | Quelltext bearbeiten]

Die folgende Anweisung fügt eine neue Zeile vor der vorletzten Zeile ein.

sed '/vorletzte/idies ist die vorvorletzte Zeile' < sed-test.txt > sed-test2.txt
* /vorletzte/ = Bereichsauswahl über RE
* i=insert-Befehl

Zeile ans Dateiende anhängen[Bearbeiten | Quelltext bearbeiten]

sed '$aEnde' < sed-test.txt > sed-test2.txt
* $=letzte Zeile (explizite Bereichsauswahl)
* a=append-Befehl

Zeichen am Zeilenanfang einfügen[Bearbeiten | Quelltext bearbeiten]

Das Zeichen "#" soll in allen Zeilen an den Zeilenanfang gesetzt werden.

sed 's/^/#/' < sed-test.txt
* s =suchen & ersetzen
* /^/ ="Zeilenanfangszeichen"
* /#/ = Replace-String

Die Anweisung erscheint auf den ersten Blick nicht ganz logisch.

  • Sie ist folgendermaßen zu interpretieren: Ersetze in jeder Zeile das am Zeilenanfang gedachte fiktive "leer-Zeichen" (sozusagen "") durch das #-Zeichen.

Es wird also nicht der Zeilenanfang selbst ersetzt, was ja gar nicht möglich wäre, da es kein Zeilenanfangszeichen analog zum Zeilenendezeichen gibt.

  • Einfacher verständlich wird die Anweisung, wenn man ein bestimmtes Wort am Zeilenanfang ersetzen lässt:
sed 's/^Hier/Dort/' < sed-test.txt 
  • Hier" am Zeilenanfang wird ersetzt durch "Dort"
Beispiel[Bearbeiten | Quelltext bearbeiten]

Das Zeichen "#" soll bei Zeilen, die mit "Hier" beginnen an den Zeilenanfang gesetzt werden.

sed 's/^Hier/#Hier/' < sed-test.txt
Beispiel[Bearbeiten | Quelltext bearbeiten]

Das Zeichen "#" soll in Zeilen, in denen "letzt" vorkommt, an den Zeilenanfang gesetzt werden.

  • Dieser Fall unterscheidet sich von den vorigen, weil das "suchen & ersetzen" auf einen bestimmten Bereich beschränkt werden muss.
  • Hierzu werden geschweifte Klammern verwendet.
sed '/letzt/{s/^/#/}' < sed-test.txt
* /letzt/ =RE; Zeilen, in denen "letzt" vorkommt, werden selektiert
* {s...} = "suchen & ersetzen" wird nur in den selektierten Zeilen ausgeführt