Ich versuche, einen sed-Befehl zu schreiben, um eine Zeile in einer Datei zu ersetzen. Die sed-Ersetzung erforderte das aktuelle Arbeitsverzeichnis, was den Befehl aufgrund der Zeichen, die mit Escapezeichen versehen werden müssen, etwas chaotisch macht.
Hier ist, was ich bisher habe:
sed -i "s/^log.*$/log `echo pwd | sed 's/\//\\\//g'`\/redis\/redis.log\/" ./conf/redis.conf
Dies gibt mir jedoch einen Fehler mit sed.
Ich habe versucht, es in einfachere Befehle aufzuteilen:
[email protected]:~/project$pwd | sed 's/\//\\\//g'
\/home\/user\/project
Dies gibt zurück, was ich will, aber wenn ich versuche, eine Befehlsersetzung hinzuzufügen, schlägt es fehl:
[email protected]:~/project$ echo `pwd | sed 's/\//\\\//g'`
sed: -e expression #1, char 9: unknown option to `s'
Jede Hilfe wäre willkommen
Akzeptierte Antwort:
Wenn ich das richtig lese, versuchen Sie, Schrägstriche (/
) mit einem Escape-Schrägstrich (\/
)? Das bringt viel einfacher zu handhaben, wenn Sie /
nicht verwenden als Trennzeichen in sed
:
~ $ pwd | sed 's_/_\\/_g'`
\/home\/username
~ $ echo "$( pwd | sed 's_/_\\/_g' )"
\/home\/username