我需要使用包含反斜杠(REVERSE SOLIDUS)字符的Windows样式目录路径替换文件中的文本。我已经在使用替代表达式分隔符。反斜杠似乎被视为转义字符。
如何在输出中保留反斜杠?
$ echo DIR=foobar | sed -e "s#DIR=.*#$(cygpath -w $(pwd))#"
C:gwin64homelit
所需的输出是:
C:\cygwin64\home\lit
答案 0 :(得分:0)
您必须以sed
替换模式转义元字符。幸运的是,其中只有三个:&
,\
和分隔符/
(请参阅this question和this)。在您的情况下,由于您使用#
作为分隔符,因此您必须转义#
而不是/
。
您可以创建辅助shell函数(如here):
escapeSubst() { sed 's/[&#\]/\\&/g'; }
然后将字符串传递给它,然后再将其传递给sed
,如下所示:
$ echo DIR=foobar | sed -e "s#DIR=.*#$(cygpath -w $(pwd) | escapeSubst)#"
C:\cygwin64\home\lit