首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash中一个字符串中的多个regex匹配

bash中一个字符串中的多个regex匹配
EN

Stack Overflow用户
提问于 2021-10-05 13:27:27
回答 2查看 1K关注 0票数 0

我有变数

代码语言:javascript
复制
test="PlayLists: 00001.mpls 01:32:39 [12 chapters] 00005.mpls 00:19:37 [4 chapters] 00003.mpls 00:08:56 [1 chapters] 00004.mpls 00:00:39 [1 chapters] 00006.mpls 00:00:29 [2 chapters] 00007.mpls 00:00:25 [2 chapters] 00000.mpls 00:00:23 [1 chapters]"

我试过:

代码语言:javascript
复制
chapters=$([[ $test =~ ((([0-9]+) chapters)+) ]] && echo "${BASH_REMATCH[1]}")
echo $chapters

但是它只返回12 chatpters,我想

代码语言:javascript
复制
12 chapters
4 chapters
1 chapters
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-05 13:56:44

有关纯bash解决方案,请参见下面的示例。

示例脚本:

代码语言:javascript
复制
# cat foo.sh
shopt -s extglob
var='[12 chapters][13 chapters][14 chapters]'
while [[ $var =~ ([0-9]+ chapters) ]]; do
    echo "${BASH_REMATCH[1]}"
    var=${var#*+([0-9]) chapters}
done

结果:

代码语言:javascript
复制
# bash foo.sh
12 chapters
13 chapters
14 chapters
票数 3
EN

Stack Overflow用户

发布于 2021-10-05 13:39:35

如果您不需要纯bash解决方案,我只需使用以下grep调用:

代码语言:javascript
复制
grep -Eo '[0-9]+ chapters'

正则表达式匹配一个数字,后面跟着“章节”,-E标志支持扩展正则表达式,因此我们不需要使用反标记的基本正则表达式regex味,并且-o标志使grep将每个匹配单独输出在一行上,而不是包含至少一个匹配项的完整行上。

你可以在这里试试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69451372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档