Ich möchte ersetzen $fileWithPath
in $file
, aber das , weil nicht funktioniert (ich glaube) Pfad nicht entgangen ist. Wie kann man dem entkommen?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
Einfache Anführungszeichen definieren ein Zeichenfolgenliteral. Wenn Sie die Variable außerhalb des Literales platzieren, kann die Shell diesen Teil erweitern.
Außerdem: Wenn Sie Pfade analysieren möchten, verwenden Sie im Befehl sed ein Trennzeichen, das nicht mit dem Verzeichnistrennzeichen "/" verwechselt wird.
$fileWithPath
Leerzeichen das falsche Muster eingefügt wird.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
scheint zu funktionieren.Ein besserer Weg für wörtliche Zeichenfolgen mit Schrägstrichen:
quelle
In Fällen, in denen die Ersetzungszeichenfolge oder die Musterzeichenfolge Schrägstriche enthält, können Sie die Tatsache nutzen, dass GNU sed einen alternativen Begrenzer für den Ersetzungsbefehl zulässt. Häufige Auswahlmöglichkeiten für das Trennzeichen sind das Pipe-Zeichen | oder das Hash # - Die beste Wahl für die Begrenzung von Zeichen hängt oft von der Art der zu verarbeitenden Datei ab. In deinem Fall kannst du es versuchen
Das Zeichen 'g' nach dem letzten # wird verwendet, um alle Vorkommen in der Datei zu ändern, wenn Sie nur das erste Vorkommen ändern und dann das 'g' entfernen müssen.
quelle