使用 sed 转义正斜杠和反斜杠

Jam*_*mes 18 bash sed

我有以下字符串: /tmp/test/folder1/test.txt

我希望使用sed以替代/\/-例如:

\/tmp\/test\/folder1\/test.txt
Run Code Online (Sandbox Code Playgroud)

所以我发出:

echo "/tmp/test/folder1/test.txt" | sed "s/\//\\\\//g"
Run Code Online (Sandbox Code Playgroud)

虽然它返回:

sed: -e 表达式 #1, char 9: `s' 的未知选项

我正在逃避正斜杠和反斜杠 - 所以不确定我在这里哪里出错了

jim*_*mij 41

您需要分别转义(使用反斜杠\)所有替换的斜杠/和所有反斜杠\,因此:

$ echo "/tmp/test/folder1/test.txt" | sed 's/\//\\\//g'
\/tmp\/test\/folder1\/test.txt
Run Code Online (Sandbox Code Playgroud)

但这相当不可读。

但是,sed允许使用几乎任何字符作为分隔符而不是/,这在一个人想要替换斜杠/本身时特别有用,例如在您的情况下,因此使用例如分号;作为分隔符命令会变得更简单:

echo "/tmp/test/folder1/test.txt" | sed 's;/;\\/;g'
Run Code Online (Sandbox Code Playgroud)

其他情况:


Jef*_*ler 6

或者,如果值在 (bash) shell 变量中:

var=/tmp/test/folder1/test.txt
$ echo "${var//\//\\\/}"
\/tmp\/test\/folder1\/test.txt
Run Code Online (Sandbox Code Playgroud)

第一个//开始参数扩展,表示用替换替换所有匹配项。下一个\//要匹配的转义,\\\/是一个转义,\然后是一个转义/作为替换。