sed Zeile mit Leerzeichen zu einer bestimmten Zeile einfügen


73

Ich habe eine Zeile mit Leerzeichen am Anfang, zum Beispiel "Hallo Welt". Ich möchte diese Zeile in eine bestimmte Zeile in einer Datei einfügen. Fügen Sie beispielsweise "Hallo Welt" in die nächste Datei ein

hello
world

Ergebnis:

hello
    hello world
world

Ich benutze dieses sed-Skript:

sed -i "${line} i ${text}" $file

Das Problem ist, dass ich meine neue Zeile ohne Leerzeichen bekomme:

hello
hello world
world

Antworten:


95

Sie können dem spaceZeichen entkommen , indem Sie beispielsweise 2 Leerzeichen hinzufügen:

sed -i "${line} i \ \ ${text}" $file

Oder Sie können es in der Definition Ihrer textVariablen tun :

text="\ \ hello world"

18
Sie nur, um dem ersten Raum zu entkommen. Sed scheint den Rest der Räume automatisch zu erkennen. Beispiel a\ textfügt den Text mit 4 Räumen an der Front.
Haridsv

Vielen Dank! So eine elegante Lösung!
ShahNewazKhan

31

Sie benötigen nur einen, \um mehrere Leerzeichen wie dieses einzugeben

sed -i "${line} i \    ${text}" $file

5
$ a="  some string  "
$ echo -e "hello\nworld"
hello
world
$ echo -e "hello\nworld" | sed "/world/ s/.*/${a}.\n&/" 
hello
  some string  .
world

Das .wurde in der obigen Substitution hinzugefügt, um zu demonstrieren, dass die nachfolgenden Leerzeichen erhalten bleiben. Verwenden Sie sed "/world/ s/.*/${a}\n&/"stattdessen.


0

Dies kann durch Aufteilen des Ausdrucks wie folgt erfolgen:

sed -i $file -e '2i\' -e "     $text"

Dies ist eine GNU-Erweiterung zur einfacheren Skripterstellung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.