如何用包含斜杠的字符串替换字符串和 sed?

mar*_*tin 14 sed

我正在寻找一种使用 sed 将文件中的字符串替换为包含斜杠的字符串的方法。

connect="192.168.100.61/foo"
srcText="foo.bar=XPLACEHOLDERX"
echo $srcText | sed "s/XPLACEHOLDERX/$connect"
Run Code Online (Sandbox Code Playgroud)

结果是:

sed: -e Expression #1, Character 32: Unknown option for `s'
Run Code Online (Sandbox Code Playgroud)

man*_*ork 33

s命令中使用另一个字符作为分隔符:

printf '%s\n' "$srcText" | sed "s|XPLACEHOLDERX|$connect|"
Run Code Online (Sandbox Code Playgroud)

或逃避与ksh93的的斜线${var//pattern/replacement}参数扩展运算符(现在也支持zshbashmkshyash和最新版本的busybox的sh)。

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"
Run Code Online (Sandbox Code Playgroud)