Ich verwende sed in einem Shell-Skript, um ein Wort in einer Datei durch einen Satz zu ersetzen, der in einer Shell-Variablen gespeichert ist. Der Satz enthält Leerzeichen und verschiedene Zeichen.Space interferiert beim Ersetzen von sed mit Shell-Variablen
Ex:
sentence="new number is > than 2.5 and < than 3.8"
sed "s|word|$sentence|g" -i Example_file.txt
Zeile in der Datei:
tile = "word - Final plot"
erwartetes Ergebnis:
title = "new number is > than 2.5 and < than 3.8 - Final plot"
erhaltene Ergebnis:
title = "new - Final plot"
Wie Sie oben sehen können, ist das Problem, dass sed
"Wort" immer nur durch das erste Wort des Satzes ersetzt, es stoppt bei dem Leerzeichen. Ich habe verschiedene Varianten des Befehls ausprobiert:
sed 's|word|'"$sentence"'|g' -i Example_file.txt
sed "s|word|${sentence}|g" -i Example_file.txt
Nichts davon scheint zu funktionieren. Um zu überprüfen, ob die Leerzeichen tatsächlich das Problem waren, habe ich sie durch "_"
ersetzt, und wenn ich das tue, ersetzt sed
den ganzen Satz.
Wer weiß, wie kann ich sed zwingen, die Räume zu nehmen und den ganzen Satz zu benutzen?
Dies ist sehr schwer zu lesen. Bitte verwenden Sie die Schaltfläche "Code-Formatierung", um Ihren Code/Ihre Befehlszeilen zu formatieren. Es ist ein einziger Klick! –
Danke Inian für die Änderung! – Inacio
Verwenden Sie 'GNU' sed ?. Funktioniert gut auf 'GNU sed Version 4.2.1' – Inian