sed删除多行

时间:2012-10-25 06:22:39

标签: sed lines

使用sed删除多行时没什么问题。我阅读了很多指南和讨论,但都没有帮助。我有一个xml文件,我需要删除这三行的更多出现:

<function type="class">
   <arg name="class.name">com.mycompany.name.UnLockIssueFunction</arg>
</function>

我想使用只删除<function>之间的部分,但有更多此标记。我的xml文件看起来像这样

<post-functions>
  <function type="class">
    <arg name="class.name">com.mycompany.name.function.issue.UpdateIssueStatusFunction</arg>
  </function>
  <function type="class">
    <arg name="class.name">com.mycompany.name.function.misc.CreateCommentFunction</arg>
  </function>
  <function type="class">
    <arg name="class.name">com.mycompany.name.function.issue.GenerateChangeHistoryFunction</arg>
  </function>
  <function type="class">
    <arg name="class.name">com.mycompany.name.function.issue.IssueReindexFunction</arg>
  </function>
  <function type="class">
    <arg name="class.name">com.mycompany.name.function.event.FireIssueEventFunction</arg>
    <arg name="eventTypeId">13</arg>
  </function>
  <function type="class">
    <arg name="class.name">com.mycompany.name.UnLockIssueFunction</arg>
  </function>
</post-functions>

2 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed '/<function type="class">/!b;N;N;/<function type="class">\s*\n\s*<arg name="class.name">com.mycompany.name.UnLockIssueFunction<\/arg>\s*\n\s*<\/function>/d' file

答案 1 :(得分:1)

当您进入更高级的编辑时,更高级的编辑可能会有所帮助。尝试阅读VIM中的脚本并查看以下问题:

Search and delete multiple lines

VIM: globally match line, delete this and 2 following lines