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


13

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

connect="192.168.100.61/foo"
srcText="foo.bar=XPLACEHOLDERX"
echo $srcText | sed "s/XPLACEHOLDERX/$connect"

结果是:

sed: -e Expression #1, Character 32: Unknown option for `s'

Answers:


31

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

printf '%s\n' "$srcText" | sed "s|XPLACEHOLDERX|$connect|"

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

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"

+1为第二种方式。第一个在freebsd上不起作用。
易卜拉欣

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.