Linux:从 XML 文件中删除具有从第 2 次出现开始的匹配字符串的行的命令

标签 linux bash awk sed

我有一个看起来像这样的 XML 文件:

<Header version= '1.0' timestamp='2017-01-04T07:10:07'>
   <Date>2017-04-18</Date>
   .
   .
   .`
</Header>
<Header version= '1.0' timestamp='2017-01-04T07:10:07'>
   <Date>2017-04-18</Date>
   .
   .
   .`
</Header>
<Header version= '1.0' timestamp='2017-01-04T07:10:07'>
   <Date>2017-04-18</Date>
   .
   .
   .`
</Header>

我想删除以第 2 次出现开始的“Header”(而不是/Header)行 - 不要问为什么 :-)。所以输出应该看起来像这样(是的,我知道它的格式不正确,但我也将对其进行其他处理):

<Header version= '1.0' timestamp='2017-01-04T07:10:07'>
   <Date>2017-04-18</Date>
   .
   .
   .`
</Header>
<Date>2017-04-18</Date>
   .
   .
   .`
</Header>
<Date>2017-04-18</Date>
   .
   .
   .`
</Header>

我试过:

sed -i '2,${/<Header/d;}' file

但这删除了所有出现的 Header。有什么建议吗?

谢谢

最佳答案

这可能对你有用(GNU sed):

sed '/^<\/Header/,${/^<Header/d}' file

从第一个结束 Header 标记到文件末尾,删除所有以 Header 标记开头的行。

关于Linux:从 XML 文件中删除具有从第 2 次出现开始的匹配字符串的行的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43774416/

相关文章:

linux - [-f : command not found

scripting - 如何使用 sed 或 awk 删除符合某些字段条件的行?

perl - 从包含日期的文件中排序并提取一定数量的行

linux - 将多个用户批量分配到多个组

linux - 跟踪 Linux 程序中活跃使用的内存

mysql - 在 Debian 7 中更改 Mysql 数据目录?

linux - 在 bash 中使用 sed 查找和替换其后继数字

linux - 有没有办法告诉 sed 忽略符号链接(symbolic link)?

bash - Unix,使用 awk 删除第一列

linux - 我正在寻找一个工具来跟踪我的服务器,我们到处都使用 Chef-solo,但很难跟踪