开发者

How can I insert a variable containing a backslash in sed?

Please see these simple commands:

$ 开发者_运维问答echo $tmp
UY\U[_
$ echo "a" | sed "s|a|${tmp}|g"
UY[_

The \U is eaten. Other backslashes won't survive either.

How can I make the above command work as expected?


If it's only backslash that is "eaten" by sed and escaping just that is enough, then try:

echo "a" | sed "s|a|${tmp//\\/\\\\}|g"

Confusing enough for you? \\ represents a single \ since it needs to be escaped in the shell too. The inital // is similar to the g modifier in s/foo/bar/g, if you only want the first occurring pattern to be replaced, skip it.

The docs about ${parameter/pattern/string} is available here: http://www.gnu.org/s/bash/manual/bash.html#Shell-Parameter-Expansion

Edit: Depending on what you want to do, you might be better of not using sed for this actually.

$ tmp="UY\U[_"
$ in="a"
$ echo ${in//a/$tmp}
UY\U[_


You could reparse $tmp itself through sed

echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g"
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜