如何在 Windows 上使用 Sed 将特殊字符插入文本文件?

Posted

技术标签:

【中文标题】如何在 Windows 上使用 Sed 将特殊字符插入文本文件?【英文标题】:How can I insert special characters into a text file using Sed on Windows? 【发布时间】:2021-06-17 00:52:00 【问题描述】:

我想在 .bat 脚本中使用 sed 命令替换文本文件的第二行。我可以在没有任何特殊字符的情况下执行此操作,例如:

sed -i 2s/.*/SUCCESS/ file.txt

但是我要插入的文本如下:

outfolder = "G:\Folder with Space and Quotes\"

如果我使用命令:

sed -i 2s/.*/outfolder = "G:\Folder with Space and Quotes\"/ file.txt

结果是错误:

sed: -e expression #1, char 15: unterminated `s' command

我想它不喜欢特殊字符?我该如何解决这个问题?

【问题讨论】:

您将不得不转义所需字符串中的一堆不同字符(至少是空格、反斜杠和引号),但我不确定这里的转义字符是否是 \ 因为 sed 或者是 ^ 因为批处理。 【参考方案1】:

您可以将命令用双引号括起来,将命令中的反斜杠和双引号转义,然后使用

sed -i "2s/.*/outfolder = \"G:\\Folder with Space and Quotes\\\"/" file.txt

或者,您也可以使用

sed -i "2s/.*/outfolder = "^""G:\\Folder with Space and Quotes\\"^""/" file.txt

请注意,我在 sed 命令中使用了双引号,文字 " 在引号外用 ^ 转义。请注意,您还需要在替换部分中使用双转义反斜杠。

【讨论】:

谢谢,双引号有效。但是我使用反斜杠而不是 ^。 sed -i "2s/.*/outfolder = \"G:\\Folder with Space and Quotes\\\"/" file.txt

以上是关于如何在 Windows 上使用 Sed 将特殊字符插入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

shell的sed工具,如何删除一个文件中包含了特殊路径字符串的行? 例如文件file,里面有内容,

Linux在Linux上查看并替换特殊字符

AIX 脚本中的 sed 不适用于特殊字符 [重复]

如何在 Windows 文档中使用特殊字符

sed命令反斜杠的转义

关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8