sed 中的斜线和反斜线

dev*_*fun 51 bash sed quoting

我想用来将sed斜杠更改为反斜杠和斜杠,即/-> \/。但它不起作用。这里有一个小例子:

#!/bin/bash
TEST=/etc/hallo
echo $TEST
echo $TEST | sed "s/hallo/bello/g"
echo $TEST | sed "s/\//\\\//g"
Run Code Online (Sandbox Code Playgroud)

前三行的输出是假设的。但是最后一个不起作用。为什么?如何修正最后一部分?

cho*_*oba 114

对您使用的表达式使用单引号:

sed 's/\//\\\//g'
Run Code Online (Sandbox Code Playgroud)

在双引号中,\有特殊含义,所以必须反斜杠:

sed "s/\//\\\\\//g"
Run Code Online (Sandbox Code Playgroud)

但是更改分隔符更干净:

sed 's=/=\\/=g'
sed "s=/=\\\/=g"
Run Code Online (Sandbox Code Playgroud)

  • 备用分隔符很棒。 (12认同)
  • @not2qubit:在`-z` 下,`$` 匹配空字节,而不是换行符。 (2认同)

cuo*_*glm 21

尝试:

sed 's/\//\\\//g'
Run Code Online (Sandbox Code Playgroud)

或使用另一个分隔符来防止您转义斜杠:

sed 's,/,\\/,g'
Run Code Online (Sandbox Code Playgroud)