删除xml文件中没有sort或unique的重复连续行

use*_*714 4 regex xml bash awk sed

我有一个xml文件,我需要保持标签的顺序,但有一个名为media的标签,它有连续顺序的重复行.我想删除其中一个重复的媒体标签,但希望保留所有的父标签 - (也是连续的和重复的).我想知道是否有一个awk解决方案只有在模式匹配时才能删除.例如:

<story>
   <article>
      <media>One line</media>
      <media>One line</media>    <-- Same line as above, want to delete this
      <media>Another Line</media>
      <media>Another Line</media>  <-- Another duplicate, want to delete this
   </article>
</story>
<story>
   <article>
     ........ and so on
Run Code Online (Sandbox Code Playgroud)

我想保留连续的故事和文章标签,只删除媒体标签的重复项.我已经尝试了许多awk脚本,但没有任何东西似乎没有排序文件和破坏xml的顺序.任何帮助非常感谢.

nu1*_*73R 5

awk脚本可以帮助你

awk '!(f == $0){print} {f=$0}' input
Run Code Online (Sandbox Code Playgroud)

测试

$ cat input
<story>
   <article>
      <media>One line</media>
      <media>One line</media>
      <media>Another Line</media>
      <media>Another Line</media>
this
   </article>
</story>
<story>
   <article>

$ awk '!(f == $0){print} {f=$0}' input
<story>
   <article>
      <media>One line</media>
      <media>Another Line</media>
this
   </article>
</story>
<story>
   <article>
Run Code Online (Sandbox Code Playgroud)

要么

$ awk 'f!=$0&&f=$0' input
Run Code Online (Sandbox Code Playgroud)

感谢Jidder

  • 更短'awk'f!= $ 0 && f = $ 0'` (2认同)