it-swarm.com.de

Schrägstrich und Backslash in sed

Ich möchte sed verwenden, um einen Schrägstrich in einen Backslash und einen Schrägstrich zu ändern, d. H. / -> \/. Aber es funktioniert nicht. Hier ein kleines Beispiel:

#!/bin/bash
TEST=/etc/hallo
echo $TEST
echo $TEST | sed "s/hallo/bello/g"
echo $TEST | sed "s/\//\\\//g"

Die Ausgabe der ersten drei Zeilen ist wie angenommen. Aber der letzte funktioniert nicht. Warum? Wie korrigiere ich den letzten Teil?

40
devopsfun

Verwenden Sie einfache Anführungszeichen für den von Ihnen verwendeten Ausdruck:

sed 's/\//\\\//g'

In doppelten Anführungszeichen \ hat eine besondere Bedeutung, daher müssen Sie sie zurücksetzen:

sed "s/\//\\\\\//g"

Aber es ist sauberer, das Trennzeichen zu ändern:

sed 's=/=\\/=g'
sed "s=/=\\\/=g"
82
choroba

Versuchen:

sed 's/\//\\\//g'

oder verwenden Sie ein anderes Trennzeichen, um zu verhindern, dass Sie einem Schrägstrich entkommen:

sed 's,/,\\/,g'
16
cuonglm