2017-12-15 6 views
1

Ich versuche, etwas Text in einer Textdatei zu ersetzen. In meinem Skript habe ich den Text speichern zu finden und innerhalb von zwei Variablen zu ersetzen:Ersetzen von Text mit sed mit Leerzeichen in Variable

$currentProductName='hello' 
$configProductName='byebye' 

Der Austausch mit dieser Linie erfolgt:

sed -i'.bak' 's/$currentProductName/$configProductName/g' "$projectFile" 

Alles funktioniert gut, bis alle meine Variablen enthalten Leerzeichen . Wenn der $configProductName auf hello world festgelegt ist, funktioniert der Befehl sed nicht wie erwartet.

Ive bereits versucht, diese aber auch nicht funktioniert:

sed -i'.bak' 's/"$currentProductName"/"$configProductName"/g' "$projectFile" 
sed -i'.bak' 's/\$currentProductName/\$configProductName/g' "$projectFile" 

Wie muss ich die Zeile wie erwartet zu funktionieren?

+1

Sind Sie sicher, dass 'sed -i'.bak'/$ currentProductName/$ configProductName/g'' funktioniert? – Sundeep

+0

ja es funktioniert ... läuft auf macOS –

+0

gut, soweit ich weiß, Bash wird String nicht in einfache Anführungszeichen interpretieren, also nicht sicher, wie es für Sie funktioniert ... seltsam – Sundeep

Antwort

1

Um die Leerzeichen beizubehalten, müssen Sie die Variable doppelt zitieren und sie erneut in einfache Anführungszeichen einschließen. Auf diese Weise haben Sie die Kontrolle darüber, welche Variablen mit dem Präfix $ erweitert werden müssen.

configProductName='hello world' 

Verwenden Sie den sed Betrieb wie unten und fügen Sie die -i Flagge, wenn Sie es finden, wie erwartet funktioniert.

sed 's/$currentProductName/'"$configProductName"'/g' file 
hello world='hello' 
$configProductName='byebye'