You need to enable JavaScript to run this app. 如何使用bash提取字符串中所有符合指定模式的字符序列
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bash提取字符串中所有符合指定模式的字符序列

解决方案

问题原因

原有脚本无法适配多匹配场景有两个核心原因:

  • 正则开头的.*是贪婪匹配规则,会吞掉字符串开头到最后一个匹配项之间的所有内容,仅能捕获到最后一个符合规则的串
  • Bash原生的=~正则匹配单次执行仅返回一组匹配结果,原生不支持直接返回全量匹配项

方案1:使用GNU grep实现(最简方案)

一行即可完成需求,适配绝大多数Linux环境:

input='Some random prefix "characters inside quotes first".fixed() some random postfix, some random post prefix "characters inside quotes second".fixed() some random post postfix.'
grep -oP '(?<=")[^"]*(?="\.fixed\(\))' <<< "$input"

参数说明:-P启用Perl正则语法支持环视规则,-o仅输出匹配到的内容,正则通过前后环视直接定位双引号内部的目标内容,无需额外处理分组。


方案2:纯Bash实现(无外部依赖)

如果不能依赖grep等外部工具,可以用循环逐次匹配截断的方式实现:

input='Some random prefix "characters inside quotes first".fixed() some random postfix, some random post prefix "characters inside quotes second".fixed() some random post postfix.'
pattern='"([^"]+)"\.fixed\(\)'
rest="$input"
while [[ $rest =~ $pattern ]]; do
    echo "${BASH_REMATCH[1]}"
    # 截断已处理的匹配段,继续匹配剩余字符串
    rest=${rest#*"${BASH_REMATCH[0]}"}
done

该方案兼容性更强,适用于所有支持=~正则匹配的Bash版本。


内容的提问来源于stack exchange,提问作者div

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:24:06