2012-11-24 84 views
2

在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 

我想这是因为' *”是GR在sed的eedy。

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

回答

7

的确,sed是贪婪的。但你可以这么做:

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

请注意,并非所有的sed接受i标志,所以你可能需要做的:

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

这做到了!非常感谢。顺便说一句,我的sed版本确实接受'我',所以它保存了几个按键。 – user1822391

相关问题