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

时间:2017-08-21 15:49:53

标签: sed escaping cygwin

我需要使用包含反斜杠(REVERSE SOLIDUS)字符的Windows样式目录路径替换文件中的文本。我已经在使用替代表达式分隔符。反斜杠似乎被视为转义字符。

如何在输出中保留反斜杠?

$ echo DIR=foobar | sed -e "s#DIR=.*#$(cygpath -w $(pwd))#"
C:gwin64homelit

所需的输出是:

C:\cygwin64\home\lit

1 个答案:

答案 0 :(得分:0)

您必须以sed替换模式转义元字符。幸运的是,其中只有三个:&\和分隔符/(请参阅this questionthis)。在您的情况下,由于您使用#作为分隔符,因此您必须转义#而不是/

您可以创建辅助shell函数(如here):

escapeSubst() { sed 's/[&#\]/\\&/g'; }

然后将字符串传递给它,然后再将其传递给sed,如下所示:

$ echo DIR=foobar | sed -e "s#DIR=.*#$(cygpath -w $(pwd) | escapeSubst)#"
C:\cygwin64\home\lit