bash - 删除两个定界符之间的字符串,包括

标签 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 搜索字符串的任何想法? sed 是最好的工具吗?我正在从 bash 脚本运行它,因此通过 bash 的任何基本 util avail 都可以。

最佳答案

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

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

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

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

关于bash - 删除两个定界符之间的字符串,包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541389/

相关文章:

bash - 使用环境变量累积 bash 参数并一起解析它们

c - 如何以编程方式访问 C 中的 bash 命令历史记录?

bash - 如何添加具有升序名称的目录,例如 dir-000、dir-001 等

linux - sed 模式匹配直到第一次匹配

html - 使用 SED/AWK/GREP 从 html 中提取 href/url

linux - 如何 fork bash 脚本

mysql - 将数据发送到 MySQL 数据库的 Bash 脚本

linux - 在 GNU/Linux 中,匹配文件中的模式并使用找到的字符串提取包含另一个文件中的字符串的行

bash - 匹配单词列表中的单词并计算出现次数

arrays - Bash 在变量或数组的每三个字段后插入一个逗号 (,)?