使用 sed 转义两次特殊字符

Escape twice special characters using sed

我在 bash 中将以下字符串变量定义为 version

Uploaded registry/version1.3.1

我需要转义 / 两次,这样字符串看起来像:

registry\/version1.3.1

有没有办法使用sed查找并替换所有/\/

一个反斜杠用于将参数更改为文本,反之亦然。

echo 'Uploaded registry/version1.3.1' | sed 's/\//\\\//g'
Uploaded registry\/version1.3.1

在这种情况下,一个反斜杠需要 \,一个斜杠需要 \/

使用sed

您需要两个反斜杠 \,在 sed 命令的 RHS(右侧)用 单个 反斜杠替换。

此外,最好使用 / 以外的字符作为正则表达式定界符以避免过度转义。

因此您可以使用

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

this online demo:

echo 'Uploaded registry/version1.3.1' | sed 's,/,\\/,g'
# => Uploaded registry\/version1.3.1 

使用字符串操作

您也可以在 Bash:

中使用字符串操作
s='Uploaded registry/version1.3.1'
echo "${s//\//\\\/}"
# => Uploaded registry\/version1.3.1

这里反斜杠又要加一倍,加一个\来转义/。请注意,"${s//a/b} 表示:s 变量 .

中所有出现的 a 替换为 b