【问题标题】:Remove string between two delimiter, inclusively删除两个分隔符之间的字符串,包括
【发布时间】:2012-11-24 21:01:56
【问题描述】:

在 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 搜索字符串? sed 甚至是最好的工具吗?我从 bash 脚本运行它,所以任何基本的 util 都可以通过 bash 使用。

【问题讨论】:

    标签: bash sed


    【解决方案1】:

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

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

    请注意,并非所有 sed 都接受 i 标志,因此您可能需要这样做:

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

    【讨论】:

    • 做到了!非常感谢。顺便说一句,我的 sed 版本确实接受 'i' 所以它节省了几次击键。
    最近更新 更多