sed 使用包含反斜杠的字符串替换



我需要用包含反斜杠(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

最新更新