shell:在反引号中使用sed

时间:2009-09-29 13:15:00

标签: shell sed escaping backticks

我想自动转义字符串中的一些特殊字符。 我想到了回应那个字符串并通过一些seds管道。这似乎不适用于反叛内容。 那么为什么呢?

echo "foo[bar]" | sed 's/\[/\\[/g'

返回

foo\[bar]

但是

FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO

只返回

foo[bar]

与sed相反,tr在反引号中完美运行:

FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO

返回

foo-bar]

3 个答案:

答案 0 :(得分:16)

如何不使用反引号但使用$()?

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO

如果你坚持使用反引号,我认为你需要额外转义所有\到双\

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO

答案 1 :(得分:6)

你需要逃避反引号之间的反斜杠。

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO

或者,使用$()(这实际上是推荐的方法)。

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO

答案 2 :(得分:2)

通常,这是一个疏忽的案例

FOO=`echo "foo[bar]" | sed 's/\[/\\\[/g'` && echo $FOO