使用 Sed 搜索和替换 XML 文件中的文本

使用 Sed 搜索和替换 XML 文件中的文本

我有以下文字File.XML

<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->

我想用

<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>

我试过:

$ sed -i 's/<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->/<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>/' File.XML

但出现此错误:

sed: -e expression #1, char 63: unknown option to `s'

答案1

问题是您的搜索模式包含/您用作替换分隔符的字符,您需要为此使用另一个字符或转义/

sed -i 's#<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->#<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>#' File.XML

或者

sed -i 's/<!--UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs-->/<UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs>/' File.XML

请注意永远不要使用正则表达式来解析 [X]HTML

最后,一般来说,使用正则表达式时,少即是多。您应该尝试指定最简单的排他模式,而不是重复所有文本。这不仅使您的代码更易于阅读,还可以避免您遇到的问题。例如:

sed -i -r 's/<!--(UpdateAccountGUIDs.+?)-->/<\1>/' File.XML

这里,-r启用了扩展的正则表达式语法,因此我们可以使用()来捕获一个组(无需转义括号),然后将捕获的文本引用为\1。因此,上面的命令只是查找与 相邻的注释UpdateAccountGUIDs,延伸到注释语句的第一个结尾,然后进行替换。

相关内容