用双引号括起来的双反斜杠替换正斜杠

10

我在拼命尝试将斜杠 (/) 替换为用双引号包含的双反斜杠 ("\\")

但是

a=`echo "$var" | sed 's/^\///' | sed 's/\//\"\\\\\"/g'`

不起作用,我不知道为什么。它总是只替换成一个反斜杠而不是两个

3个回答

27

在正则表达式中,如果要用sed命令的s(替换)命令替换斜杠/时,可以使用另一个字符代替斜杠。例如,您可以这样书写:

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

上面的,被用来分隔 s 命令的两个参数,而不是通常使用的斜杠:描述要替换的部分的正则表达式和用作替换的字符串。

以上代码将用两个反斜杠替换每个斜杠。反斜杠是一个特殊字符(引号),所以它必须被引用,这里用自身引用,这就是为什么我们需要四个反斜杠来表示两个反斜杠的原因。

$ echo /etc/passwd| sed 's,/,\\\\,g'
\\etc\\passwd

21

这个怎么样?

a=${var//\//\\\\}

在shell中的演示:

$ var=a/b/c
$ a=${var//\//\\\\}
$ echo "$a"
a\\b\\c

1
不错。我一直没有意识到在替换前面添加第二个斜杠可以使其全局匹配,这个技巧非常有用! - Keith Hughitt
busybox ash(BusyBox v1.21.1,v1.22.1)在“/”替换方面存在问题 $ a = abc / abc / abc $ echo $ {a // c / } ab / ab_ / ab_ $ echo $ {a // \ / _} abc / abc / abc - yurenchen

0
另一种方法是:tr '/' '\'
$ var=a/b/c
$ echo "$var"
a/b/c
$ tr '/' '\' <<< "$var"
a\b\c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接