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
Yo Al
quelle

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"
Atropo
quelle
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
LeoChu
quelle
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.

devnull
quelle
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.

dashohoxha
quelle