我在 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" /> -->>