Ich habe versucht , den folgenden Code zu ersetzen , QQ
mit ZZ
, aber es nicht tut , was ich will:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Dieser Code macht jedoch, was ich will:
sed -i 's/QQ/ZZ/g' $file
Wie verwende ich Variablen in sed
?
command-line
bash
sed
UAdapter
quelle
quelle
Antworten:
Die Shell ist für das Erweitern von Variablen verantwortlich. Wenn Sie einfache Anführungszeichen für Zeichenfolgen verwenden, wird deren Inhalt wörtlich behandelt.
sed
Versuchen Sie daher jetzt, jedes Vorkommen des Buchstabens$var1
durch zu ersetzenZZ
.Anführungszeichen verwenden
Verwenden Sie doppelte Anführungszeichen, um die Shell zu erweitern und dabei Leerzeichen beizubehalten:
Wenn Sie das Anführungszeichen in der Ersatzzeichenfolge benötigen, müssen Sie ihm einen Backslash voranstellen, der von der Shell interpretiert wird. Im folgenden Beispiel wird die Zeichenfolge
quote me
durch ersetzt"quote me"
(das Zeichen&
wird interpretiert vonsed
):Verwenden von einfachen Anführungszeichen
Wenn Sie viele Shell-Metazeichen haben, können Sie einfache Anführungszeichen für das Muster und doppelte Anführungszeichen für die Variable verwenden:
Beachten Sie, wie ich
s,pattern,replacement,
statts/pattern/replacement/
, ich habe es Interferenzen mit dem zu vermeiden ,/
in\0/
.Beispiel
Die Shell führt dann den obigen Befehl
sed
mit den nächsten Argumenten aus (vorausgesetztpattern=bert
undfile=text.txt
):Wenn
file.txt
enthältbert
, wird die Ausgabe sein:quelle
g
Option, also würdest dus,foo,bar,g
stattdessen passen .\\0
statt zu verwenden\0
, sollten Sie dies nicht tun, wenn\0
es in einfachen Anführungszeichen steht. Andernfallssed
wird das Muster\0
anstelle der gesamten Übereinstimmung durch ein Literal ersetzt .Wir können Variablen in
sed
doppelten Anführungszeichen verwenden:Wenn
/
die Variable einen Schrägstrich enthält, verwenden Sie ein anderes Trennzeichen, wie unten dargestellt:quelle
/
in der Variablen haben => Das hat mich gerettet! Meine Variable ist eine URL und enthält/
. Der Wechsel zur Verwendung|
als Trennzeichen hat mein Problem