我有变数
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]"我试过:
chapters=$([[ $test =~ ((([0-9]+) chapters)+) ]] && echo "${BASH_REMATCH[1]}")
echo $chapters但是它只返回12 chatpters,我想
12 chapters
4 chapters
1 chapters
...发布于 2021-10-05 13:56:44
有关纯bash解决方案,请参见下面的示例。
示例脚本:
# 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结果:
# bash foo.sh
12 chapters
13 chapters
14 chapters发布于 2021-10-05 13:39:35
如果您不需要纯bash解决方案,我只需使用以下grep调用:
grep -Eo '[0-9]+ chapters'正则表达式匹配一个数字,后面跟着“章节”,-E标志支持扩展正则表达式,因此我们不需要使用反标记的基本正则表达式regex味,并且-o标志使grep将每个匹配单独输出在一行上,而不是包含至少一个匹配项的完整行上。
你可以在这里试试。
https://stackoverflow.com/questions/69451372
复制相似问题