使用Bash中的sed转义域名中的点

时间:2011-08-15 00:31:33

标签: bash sed escaping

我试图在变量中保留sed替换的返回值:

  • D=domain.com
    echo $D | sed 's/\./\\./g'
    

    正确退货:域\ .com

  • D1=`echo $D | sed 's/\./\\./g'`
    echo $D1
    

    返回: domain.com

我做错了什么?

2 个答案:

答案 0 :(得分:9)

D2=`echo $D | sed 's/\./\\\\./g'`
echo $D2

想想每次执行时重新扫描行的shell。因此echo $ D1具有其中的转义,在回显它之前,在解析行时将转义应用于该值。解决方案是更多的逃脱。

在嵌套的shell语句中获取正确的转义可以让你在有趣的时间生活。

答案 1 :(得分:2)

反引号运算符用反斜杠替换转义的反斜杠。你需要逃脱两次:

D1=`echo $D | sed 's/\./\\\\./g'`

如果愿意,您也可以逃避第一个反斜杠。