Sed/Dateien ergänzen
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
Zeile innerhalb des Textes einfügen
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
sed '$aEnde' < sed-test.txt > sed-test2.txt * $=letzte Zeile (explizite Bereichsauswahl) * a=append-Befehl
Zeichen am Zeilenanfang einfügen
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
Das Zeichen "#" soll bei Zeilen, die mit "Hier" beginnen an den Zeilenanfang gesetzt werden.
sed 's/^Hier/#Hier/' < sed-test.txt
Beispiel
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