![sed fügt Variable vor der letzten Zeile ein](https://rvso.com/image/1558663/sed%20f%C3%BCgt%20Variable%20vor%20der%20letzten%20Zeile%20ein.png)
Ich möchte vor der letzten Zeile eine Variable einfügen.
Dies ist meine Datei.
$ cat file.txt
one
two
three
four
five
Wenn ich es ohne Variablen versuche, funktioniert es einwandfrei.
$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five
Wenn ich eine Variable verwende, funktioniert es nicht. Ich habe verschiedene Kombinationen aus Anführungszeichen und Backslashs ausprobiert.
$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five
Antwort1
In bash
stehen einfache Anführungszeichen für feste, wörtliche Zeichenfolgen. Doppelte Anführungszeichen werden dort verwendet, wo Variableninterpolation, Befehlsersetzung usw. erfolgen sollen.
Ihr sed
Befehl muss sowohl einen Literalwert enthalten $
(damit der i
Befehl auf die letzte Zeile der Datei angewendet wird)UND $NAME
für die zu interpolierende Variable. Dazu müssen Sie das Literal $
mit einem Backslash „escapen“, damit die Shell es $i
in Ihrem Sed-Skript nicht als „ersetzen durch den Inhalt der Variable $i“ interpretiert, sondern als „Literal $
gefolgt von Literal i
“:
Übrigens ist es besser, solche Dinge ohne die -i
Option zu testen, damit sed
Ihre Eingabedatei nicht durcheinander gerät, während Sie die richtige Syntax herausfinden. Fügen Sie die Option -i
später hinzu, wenn Sie sicher sind, dass sie genau das tut, was Sie möchten.
$ NAME=name
$ sed "\$i $NAME" file.list
one
two
three
four
name
five
Antwort2
Ein anderer Weg:
$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five