【发布时间】:2014-07-19 18:59:13
【问题描述】:
编辑:之前没有提到这是要在 OS X 中执行的
我正在尝试创建一个 bash 脚本,该脚本将从文件中删除一些块并将结果保存到另一个文件中。
我要过滤的文件内容应该是这样的:
<element>
<subElement name="leaveme"/>
<subElement name="leaveme"/>
<subElement name="leaveme"/>
</element>
<element>
<subElement name="removeme"/>
<subElement name="removeme"/>
<subElement name="removeme"/>
</element>
<element>
<subElement name="leaveme"/>
<subElement name="leaveme"/>
<subElement name="leaveme"/>
</element>
我要删除的是包含 <element></element> 标签的组,其中包含子元素 <subElement name="removeme"/>
保证任何组都不会混合“removeme”和“leaveme”元素。
我知道如何使用这样的正则表达式来做到这一点:
<element>(?:(?!/elem).)*"removeme".*?</element>
但我真的不知道如何在 shell 脚本中执行此操作,找到了一些关于 sed 的信息,但不知道如何完成。
谢谢。
【问题讨论】:
-
sed不太适合这项任务。请改用awk。看看 Jotne 的答案(或者可能是我的)here。它基本上与你想要的相反,但你应该能够适应它。 -
我确实看过但它只是使用一些分隔符来定义删除的内容,我需要知道内容是否包含特定文本以确定是否删除它,是否可以调整它?
-
它同时使用分隔符(如您的
<element>标签)和内容。我认为这很容易适应。我会尝试一下,如果它不适用,我会告诉你,但我认为它是。 -
好的,非常感谢:D
-
另请注意格伦杰克曼的回答,这确实更合适,绝对更防弹。