2016-06-23 15 views
0

Das ist mein einfacher Shell-SkriptMit sed Befehl in Shell-Skript

sample.sh

LOCALCONFIGDIR="Install" 
CONFLOC="$LOCALCONFIGDIR/server.conf" 
echo "Enter Web Url:" 
read weburl 
echo "sed 's/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC 
sed "'s/^\(ServerName\)$/\1 "$weburl"/' "$CONFLOC 

Wenn ich diesen Code ausführen, ich das Ergebnis in Echo-Befehl erhalten, wie folgend.

Aber wenn sed Befehl in der nächsten Zeile ausgeführt wird, wird der folgende Fehler angezeigt.

Ich habe versucht den Befehl in Echo-Anweisung von Terminal-Bildschirm produziert, es funktioniert. Aber Line number 5, arbeitet nicht von Shell-Skript

Antwort

1

Sie benötigen einen Satz von Anführungszeichen zu verwenden, nicht zwei, und da Sie die $weburl Variable erweitert wollen, müssen Sie doppelte Anführungszeichen verwenden:

sed "s/^\(ServerName\)$/\1 $weburl/" "$CONFLOC" 

That Solange OK $weburl keine Schrägstriche enthält. Ist dies der Fall, müssen Sie als / einen anderen Charakter verwenden, wie %, die Teile des Ersatz Befehl zu trennen:

sed "s%^\(ServerName\)$%\1 $weburl%" "$CONFLOC" 
+0

Es funktioniert. sed "s% $^\ (ServerName \) $% \ 1 www.weburl.com%" Install/server.conf. Aber es fügt den Text www.weburl.com nach dem ServerName nicht hinzu. –

+1

Ich habe gerade ein streunendes '$' in der zweiten 'sed' entfernt; Hättest du das benutzt, hätte das Spiel nicht funktioniert. Wenn das nicht das Problem ist, dann hat Ihre Konfigurationsdatei möglicherweise Leerzeichen vor oder nach 'ServerName' in der Konfigurationszeile, oder vielleicht enthält die Datei keine Zeile, die nur' ServerName' enthält. –

+1

Vielleicht sed Befehle werden am besten gedient, indem Sie einfache Anführungszeichen verwenden und die doppelt zitierten Shellvariablen d. H. 'Sed 's /.../'" $ {var} "'/' file'. Der Grund dafür ist, dass Meta-Zeichen, die unwissentlich in den sed-Befehlen verwendet werden, von der Shell interpoliert werden. – potong