一个相当简单的目标 - 我想:在括号中匹配包含两个逗号分隔部分的文本,例如: [第一秒] 这就是整行,我使用了bash 4.1。
我尝试了这样的模式匹配,然后尝试使用BASH_REMATCH:
[[ "$file_contents" =~ ^[\ []\(.*\),\(.*\)\ []\ ]$ ]] && echo YES || echo NO
我尝试了几次小修改,但完全没有匹配或BASH_REMATCH的内容错误。
上面的正则表达式有什么不对?
答案 0 :(得分:1)
这适用于来自CentOS 5的bash 3.2.25(1)
但是来自CentOS 6的bash 4.1.2(1)
失败:
$ file_contents="[word1 word2,word3 word4]"
$ [[ $file_contents =~ ^\\[([^,]+),([^]]+)\\] ]]; echo $?
0
$ declare -p BASH_REMATCH
declare -ar BASH_REMATCH='([0]="[word1 word2,word3 word4]" [1]="word1 word2" [2]="word3 word4")'
^
\\[
(
[^,]+
)
,
(
[^]]+
)
\\]
这可以在CentOS 6的bash 4.1.2(1)
中使用,但在CentOS 5的bash 3.2.25(1)
中失败:
[[ $file_contents =~ ^\[([^,]+),([^]]+)\] ]]; echo $?
^
\[
(
[^,]+
)
,
(
[^]]+
)
\]
答案 1 :(得分:0)