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