1

用 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>
4

2 回答 2

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
于 2012-10-25T06:54:25.990 回答
1

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

搜索和删除多行

VIM:全局匹配行,删除此行和以下 2 行

于 2012-10-25T07:03:13.993 回答