如何使用 sed 替换 xml 文件中的行

如何使用 sed 替换 xml 文件中的行

我在 File.XML 中有以下文本:

<http-listener name="default" socket-binding="http" max-post-size="1073741824" />

我想用

<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

我试过

sed -i 's/<http-listener name="default" socket-binding="http" max-post-size="1073741824" /><!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>' test.xml

但出现错误

答案1

<!--在开始 ( )处插入所需的块 ( ^):

sed 's/^/<!-- /'

例子:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^/<!-- /' <<<"$var"
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" />

值得注意的是,要解析像这样的结构化数据xml,您应该使用能够理解该结构的工具,例如xmlstarlet


回答已编辑的问题:

您可以在开始和结束处匹配精确的子字符串,在替换中使用\0所需的替换子字符串来引用整个匹配:

sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/'

例子:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/' <<<"$var"                     
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

相关内容