一. 坏方法:更改分隔符
sed 's/xxx/'"$PWD"'/'
sed 's:xxx:'"$PWD"':'
sed 's@xxx@'"$PWD"'@'
也许那些不是最终的答案,
你不知道会出现什么字符$PWD
,/
:
或者@
。
好的方法是替换(转义)中的特殊字符$PWD
。
二. 好方法:转义分隔符
例如:尝试替换URL
为 $url (:
/
内容中有)
x.com:80/aa/bb/aa.js
在字符串 $tmp
<a href="URL">URL</a>
A./
用作分隔符
在 var 中转义/
(\/
在 sed 表达式中使用之前)
## step 1: try escape
echo ${url//\//\\/}
x.com:80\/aa\/bb\/aa.js #escape fine
echo ${url//\//\/}
x.com:80/aa/bb/aa.js #escape not success
echo "${url//\//\/}"
x.com:80\/aa\/bb\/aa.js #escape fine, notice `"`
## step 2: do sed
echo $tmp | sed "s/URL/${url//\//\\/}/"
<a href="x.com:80/aa/bb/aa.js">URL</a>
echo $tmp | sed "s/URL/${url//\//\/}/"
<a href="x.com:80/aa/bb/aa.js">URL</a>
或者
B.:
用作分隔符(比 更具可读性/
)
在 var 中转义:
(\:
在 sed 表达式中使用之前)
## step 1: try escape
echo ${url//:/\:}
x.com:80/aa/bb/aa.js #escape not success
echo "${url//:/\:}"
x.com\:80/aa/bb/aa.js #escape fine, notice `"`
## step 2: do sed
echo $tmp | sed "s:URL:${url//:/\:}:g"
<a href="x.com:80/aa/bb/aa.js">x.com:80/aa/bb/aa.js</a>