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

在Bash中使用sed在域名中转义点,bash,sed,escaping,Bash,Sed,Escaping,我试图在变量中保留sed替换的返回: 正确返回:domain\.com 返回:domain.com 我做错了什么 反勾号操作符用反斜杠替换转义的反斜杠。你需要逃跑两次: D1=`echo $D | sed 's/\./\\\\./g'` 如果愿意,也可以跳过第一个反斜杠。D2=`echo$D|sed's/\./\\\./g'` D2=`echo $D | sed 's/\./\\\\./g'` echo $D2 echo$D2 想想shell在每次执行该行时都会重新扫描它。因此,ech

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

  • 正确返回:domain\.com

  • 返回:domain.com


我做错了什么

反勾号操作符用反斜杠替换转义的反斜杠。你需要逃跑两次:

D1=`echo $D | sed 's/\./\\\\./g'`
如果愿意,也可以跳过第一个反斜杠。

D2=`echo$D|sed's/\./\\\./g'` D2=`echo $D | sed 's/\./\\\\./g'` echo $D2 echo$D2 想想shell在每次执行该行时都会重新扫描它。因此,echo$D1包含转义符,在echo看到行之前,在解析行时将转义符应用于值。解决办法是更多的逃避


在嵌套的shell语句上获得正确的转义可以让您生活在一个有趣的时代。

似乎需要双重转义。这是有效的-D1=`echo$D|sed's/\./\\\\\\\./g'`不知道为什么,尽管“有趣的时代”的确如此,兄弟。谢谢你的帮助。
D1=`echo $D | sed 's/\./\\\\./g'`
D2=`echo $D | sed 's/\./\\\\./g'` echo $D2