代码之家  ›  专栏  ›  技术社区  ›  Nick

shell:在backticks中使用sed

  •  2
  • Nick  · 技术社区  · 16 年前

    我想自动转义字符串中的一些特殊字符。 那为什么呢

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

    返回

    foo\[bar]
    

    但是

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

    刚回来

    foo[bar]
    

    与sed相比,tr在backticks内部工作得非常好:

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

    返回

    foo-bar]
    
    3 回复  |  直到 14 年前
        1
  •  7
  •   Alex Barrett    16 年前

    您需要避开反斜杠之间的反斜杠。

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

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

    FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
    
        2
  •  16
  •   fforw    16 年前

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

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

    如果你坚持使用反勾号,我认为你需要额外的转义成双精度\

    FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
    
        3
  •  2
  •   Michael Krelin - hacker    16 年前

    通常,这是一种逃逸不足的情况

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