Antworten:
Sie können den Backslash entweder durch ein Leerzeichen ersetzen, wie Sie im Beispielergebnis zeigen:
sed 's/\\/ /g'
oder Sie können es entfernen, wie Sie in Ihrem Code zeigen:
sed 's/\\//g'
Es gibt mögliche Probleme beim Entkommen von Backslash, um seine spezielle Bedeutung aufzuheben. Backslash ist ein Sonderzeichen, das zum Escapezeichen sowohl in einer Shell als auch in regulären Ausdrücken verwendet wird.
Der Befehl, den Sie in die Befehlszeile der Shell oder in ein Skript eingeben, wird zuerst von der Shell verarbeitet, die die spezielle Bedeutung von Zeichen und deren Escapezeichen interpretiert. Das Ergebnis wird dann an den auszuführenden Befehl (like sed
) übergeben, der eine eigene Interpretation der Zeichen durchführt. Wenn Sie einen Befehl erstellen, ist die mentale Prozedur umgekehrt: Fügen Sie zuerst das Escapezeichen für den regulären Ausdruck und dann das Escapezeichen für die Shell hinzu.
In einem regulären Ausdruck (Eingabe von Befehlen wie sed
, grep
etc.) Backslash kann durch Backslash wie folgt entwertet werden: \\
und auch können Sie die Set - Ausdruck verwenden , [\]
wie Sie verwendet , da es Backslash seine besondere Bedeutung verliert.
In einer Shell (wie bash
) können Sie Backslash für Backslash entkommen. Also anstatt zu \
schreiben \\
. Das Einschließen der Zeichenfolge zwischen doppelte Anführungszeichen "
macht das Backslash-Verhalten komplizierter <1>, aber ein doppelter Backslash erzeugt immer noch einen einzelnen Backslash. Wenn Sie die Zeichenfolge zwischen einfache Anführungszeichen setzen, '
wird jedes Zeichen mit Ausnahme von wörtlich behandelt '
.
Wenn Sie doppelte Anführungszeichen verwenden möchten , können Sie eine der folgenden Optionen verwenden :
sed "s/\\\\//g"
- Escape \
by \
in der Shell und Escape alle \
in der Regex erneut. Tatsächlich sind in diesem Fall keine doppelten Anführungszeichen erforderlich, da jedes Sonderzeichen ordnungsgemäß maskiert wird.
sed "s/[\\]//g"
- Escape in der Shell durch einen Backslash \
und in der Regex ein Set verwenden [
]
.
sed "s/[\]//g"
- Ja, Ihr Beispiel sollte in einer POSIX-kompatiblen Umgebung funktionieren! Zwischen doppelten Anführungszeichen \
stellt sich selbst dar, es sei denn, es steht im Zusammenhang mit doppelten Anführungszeichen vor einem Sonderzeichen: $`"\
oder einer neuen Zeile. Es sieht so aus, als ob in Ihrem Fall entweder die Shell oder die sed
nicht dem POSIX-Standard entspricht.
Bei einfachen Anführungszeichen können Sie die Zeichenfolge auch so verwenden, wie Sie sie verwendet haben, oder auf kürzere Weise:
sed 's/[\]//g'
sed 's/\\//g'
In awk würde ich das gerne tun,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Platzieren Sie ein \
Vorher \
wie bei den meisten Sonderzeichen.
g
Flagge aus unbekannten Gründen weggelassen . Dies ändert das Verhalten des Befehls, aber eine solche Änderung wurde in der Frage nicht angefordert. Andernfalls bringt Ihre Antwort im Vergleich zu den früheren Antworten nichts Neues.
sed
(oder führen Sie diesen Befehl möglicherweise über eine Nicht-POSIX-Shell aus?). Sie brauchen aber nichtsed
,tr
ist genug :tr -d '\\' < P
.