在bash脚本中,有什么实用工具以及如何在两个字符串之间删除文本,包括stings.
原文:
(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9
Run Code Online (Sandbox Code Playgroud)
我想删除'(def'和下一个')'之间的所有文本.所以我想要的输出是:
(ABC blah1)blah 2blah 7)blah 9
Run Code Online (Sandbox Code Playgroud)
最好让搜索不区分大小写...在上面的例子中,它找到并删除'(def ...)'和'(DEF ...)'
我试过了:
echo "(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9" | sed 's/(def.*)//gI'
Run Code Online (Sandbox Code Playgroud)
但输出是:
(ABC blah1)blah 2blah 9
Run Code Online (Sandbox Code Playgroud)
我认为这是因为'.*'在sed中是贪婪的.
我有什么想法可以格式化我的sed搜索字符串?甚至是最好的工具吗?我从一个bash脚本运行它,所以任何基本的util都可以通过bash来实现.
的确,sed很贪心.但你可以这样做:
sed 's/(def[^)]*)//gi'
Run Code Online (Sandbox Code Playgroud)
请注意,并非所有sed都接受该i标志,因此您可能需要执行以下操作:
sed 's/([dD][eE][fF][^)]*)//g'
Run Code Online (Sandbox Code Playgroud)