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