2016-08-30 5 views
1

Ich habe eine einzelne Datei Shell-Skript (BusyBox, keine Bash, Ksh ich glaube), dass ich einen Pfad zu sich selbst schreiben möchte, wenn Sie ausgeführt werden. Ich brauche #home durch home =/home ersetzt werden. Ich habe dies:sed inplace Ersatz ersetzt sich

var="/home" 
#home 
sed -i 's/#home/home=$var/g' /this/file.sh 

Wenn er gestartet wird es #Home und die Zeichenfolge in der sed Linie und die $ var erweitert wird nicht ersetzt werden:

var="/home" 
home=$var 
sed -i 's/home=$var/home=$var/g' /this/file.sh 

Das ist mein gewünschtes Ergebnis:

var="/home" 
home=/home 
sed -i 's/#home/home=$var/g' /this/file.sh 

Ich ziehe meine Haare, damit dies funktioniert. Irgendwelche Hinweise?

mich der Beantwortung dieser wie erwartet funktioniert:

var="/home" 
#home 
sed -i "s|^#home|home=${var}/|g" m.sh 
+0

versuchen Sie 'sed -i "s/# home/home = $ var/g"/dies/file.sh' – Sundeep

+1

siehe [sed ersetzen mit Shell-Variablen] (http://stackoverflow.com/documentation/sed/ 1096/Substitution/3519/Substitution-mit-Shell-Variablen # t = 201608300833232824835) für weiterführende Literatur – Sundeep

+1

sed -i 's/^ # home $/home = $ var/g' – pdg

Antwort

1

Zwar gibt es mehrere Möglichkeiten sein kann, diese Frage zu beantworten. Versuchen Sie, den Zirkumflex (^) am Anfang des Musters hinzuzufügen, um anzuzeigen, dass sich dieses Muster am Anfang der Linie befindet.

Bevor das Skript ausgeführt wird (hier ist es m.sh genannt)

#!/bin/bash 

var="/home" 
#home 
sed -i 's/^#home/home=$var/g' m.sh 

Nach dem Ausführen des Skripts

#!/bin/bash 

var="/home" 
home=$var 
sed -i 's/^#home/home=$var/g' m.sh 

EDIT Sie können auch die g Entfernung zu betrachten Modifikator in sed, da Sie nur einmal in der Zeile übereinstimmen möchten.

+1

Hoppla! Sieht aus wie Benutzer pdg kommentiert, während ich die Antwort eintippte. – Harald

+0

Funktioniert, aber ich brauche home = $ var, um nach home erweitert zu werden =/home – stargazer

+0

Die Verwendung von Pipes als Trennzeichen und das Einfügen von var in geschweifte Klammern funktioniert. Danke für die Hilfe. – stargazer