【问题标题】:Delete empty xml tags from file through SED in unix [duplicate]在unix中通过SED从文件中删除空的xml标签[重复]
【发布时间】:2017-03-21 15:19:53
【问题描述】:

我有一个带有空标签的 xml 文件,例如

<action></action>

需要从 xml 文件中删除这些标签。

试过了:

cat file1.xml | sed 's/\<action\>\<\/action\>//g'

任何帮助都会得到帮助。

【问题讨论】:

  • 你对删除空标签后留下的空行满意吗?一般来说,最好使用专门的 xml 工具来处理 XML,而不是依赖丑陋的 hack。
  • 如果开始和结束标签在不同的行上,你想发生什么?那还是空的还是\n 重要?

标签: xml bash unix sed


【解决方案1】:

做:

sed -E 's#<([^>]+)></\1>##g'
  • #s(替换)分隔符,因为输入包含 /

  • &lt;([^&gt;]+)&gt; 匹配&lt; 然后匹配到下一个&gt; 的子字符串并放入捕获的组1,&gt; 匹配文字&gt;

  • &lt;/\1&gt; 匹配 &lt;,然后是 /,然后是捕获的组 1,然后是 &gt;

  • 整个匹配被全局替换为空字符串 (g),即一行中的所有实例

示例:

% sed -E 's#<([^>]+)></\1>##g' <<<'<action></action><action>ok</action>'
<action>ok</action>

编辑:

如果你只想删除action标签:

sed -E 's#<(action)></\1>##g'

【讨论】:

  • 感谢@heemayl 的回复,但它会删除其他空白标签,例如“”,请告知
  • @joy 检查我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2013-08-01
  • 2012-02-22
  • 2021-04-26
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多