删除两个分隔符之间的字符串,包括

时间:2012-11-24 12:53:10

标签: bash sed

在bash脚本中,有哪些实用工具以及如何删除两个字符串之间的文本,包括蜇伤。

原文:

(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9

我想删除'(def'和下一个')'之间的所有文字。所以我想要的输出是:

(ABC blah1)blah 2blah 7)blah 9

最好让搜索不区分大小写......在上面的示例中,它找到并删除'(def ...)'和'(DEF ...)'

我试过了:

echo "(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9" | sed 's/(def.*)//gI'

但输出是:

(ABC blah1)blah 2blah 9

我认为这是因为'。*'在sed中贪婪。

我可以如何格式化我的sed搜索字符串?甚至是最好的工具吗?我从一个bash脚本运行这个,所以任何基本的util都可以通过bash来实现。

1 个答案:

答案 0 :(得分:7)

确实,sed很贪心。但你可以这样做:

sed 's/(def[^)]*)//gi'

请注意,并非所有sed都接受i标志,因此您可能需要执行以下操作:

sed 's/([dD][eE][fF][^)]*)//g'