GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Blackslash in Sed entkommen?

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

Linux
  1. Wie ersetze ich eine Zeichenfolge in einer oder mehreren Dateien?

  2. Wie verwendet man Sed, um eine mehrzeilige Zeichenfolge zu ersetzen?

  3. Ergänzung mit „sed“?

  4. Alle C-Kommentare mit Sed löschen?

  5. Sed On Osx Insert an einer bestimmten Zeile?

Ersetzen von Zeichenfolgen in Bash

BENUTZUNG DES SED-EDITORS

Top 20 der zu verwendenden sed-Befehle

Ersetzung von Umgebungsvariablen in sed

Mehrzeilige Sed ersetzen

Korrekter Escape-Forward-Slash im Bash-Skript zur Verwendung mit sed