在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来实现。
答案 0 :(得分:7)
确实,sed很贪心。但你可以这样做:
sed 's/(def[^)]*)//gi'
请注意,并非所有sed都接受i
标志,因此您可能需要执行以下操作:
sed 's/([dD][eE][fF][^)]*)//g'