【问题标题】:Delete the whole xml tag using the sed command使用 sed 命令删除整个 xml 标签
【发布时间】:2018-02-03 03:03:55
【问题描述】:

我想删除包括内容在内的整个 xml 标签。但只有前两行被删除。 sed 或者 awk 都可以

 <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
                   maxTotal="100" maxIdle="30" maxWaitMillis="10000"
                   username="javauser" password="javadude" 
                             driverClassName="com.mysql.jdbc.Driver"
                             url="jdbc:mysql://localhost:3306/javatest"/>

尝试 sed 命令后sed -i "/Resource/,/[^\/&gt;]/d" test.xml

我还剩下

  username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest"/>

【问题讨论】:

  • sed 或 awk 没问题 - 它们在这里很糟糕。发布一个扩展的输入片段
  • 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
  • 具有讽刺意味的是,xmlstarlet 这个工作的正确工具不在标签中。记住这一点 - jq is sed for jsonxmlstarlet is sed for xml

标签: xml sed


【解决方案1】:

使用 xmlstarlet:

xmlstarlet edit --delete '//path/to/your/tag' file.xml

【讨论】:

  • 这应该是公认的答案。工作的权利也是xmlstartlet
【解决方案2】:

这会做你想做的事

sed '/&lt;Resource /{:a;N;/\/&gt;/!ba};/&lt;Resource/d' test.html

【讨论】:

  • comment 非常感谢您对此的帮助
  • sed '//d' 就够了。
猜你喜欢
  • 2015-10-07
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多