【问题标题】:shell: Using sed in backticksshell:在反引号中使用 sed
【发布时间】:2009-09-29 13:14:59
【问题描述】:

我想自动转义字符串中的一些特殊字符。 我想通过一些 sed 来回显该字符串并通过管道传输它。这似乎在反引号内不起作用。 那为什么呢

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]

【问题讨论】:

    标签: shell sed escaping backticks


    【解决方案1】:

    不使用反引号而是使用 $() 怎么样?

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

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

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

    【讨论】:

    【解决方案2】:

    您需要转义反引号之间的反斜杠。

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

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

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

    【讨论】:

      【解决方案3】:

      通常是转义不足的情况

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

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2014-03-24
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        相关资源
        最近更新 更多