我有一个xml文件,其中包含的行类型-
<!--
<xml:tag.type-one>on</xml:tag.type-one>
<xml:tag.type-two>off</xml:tag.type-two>
-->
1.我想删除注解**,如果它们已经存在**(如上所述)在<xml:tag.type-one>on</xml:tag.type-one>
之前和<xml:tag.type-two>off</xml:tag.type-two>
之后。如果这些标签已经没有注解,则不需要进行任何更改。
1.我想在<xml:tag.type-one>on</xml:tag.type-one>
之前和<xml:tag.type-two>off</xml:tag.type-two>
之后添加注解**(如果它们还没有出现)。如果这些标签已经被注解,那么不需要进行任何更改。
我一直在努力-
sed -ni '/^\s*<xml:tag.type-one>on<\/xml:tag.type-one>\s*$/{x;d;};1h;1!{x;p;};${x;p;}' path/to/file
sed -i '/^\s*<xml:tag.type-two>off<\/xml:tag.type-two>\s*$/{N;s/\n.*//;}' path/to/file
这些命令会删除该行前后的(<!--
和-->
注解)(如果存在)。如果不匹配,这些命令将删除匹配模式前后的行。
如何删除匹配模式前后的<!--
和-->
(仅当它们存在时)。另外,如何仅在匹配模式的最后一次出现时进行此更改?
1条答案
按热度按时间ergxz8rk1#
假设整个xml数据可以轻松地放入内存中:
要只更改最后一个匹配项,请使用贪婪匹配来消耗前面的所有行: