这匹配什么:bash正则表达式

时间:2011-05-01 03:26:10

标签: regex bash shell

if [[ "$len" -lt "$MINLEN" && "$line" =~ \[*\.\] ]]

这是来自Advanced bash脚本指南“例10-1。在文本文件的段落之间插入一个空行”

据我所知,这匹配“任何字符串或点字符”。对吗?

3 个答案:

答案 0 :(得分:4)

它匹配零个或多个左括号字符(\[*),后跟句点和方括号(\.\])。请注意,它只需要在“$ line”中的某处存在匹配,而不是整个字符串匹配。这是一个演示:

$ showmatch() { [[ "$1" =~ \[*\.\] ]] && echo "matched: '${BASH_REMATCH[0]}'" || echo "no match"; }
$ showmatch "abc[.]def"
matched: '[.]'
$ showmatch "abc.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.]def"
matched: '[[[[[[[.]'
$ showmatch "abc[[[[[[[xyz.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.xyz]def"
no match

...而且我很确定这不是它在该示例脚本中应该做的事情。

答案 1 :(得分:2)

这意味着任何字符串以括号内的点结尾,例如:

[.]
[abc.]

答案 2 :(得分:0)

更新:给Gordon Davisson +1,他总结得很好......所以我已经修改了我原来的帖子

简而言之:您可以像这样测试bash正则表达式匹配的结果:

[[ "[*.]" =~ \[*\.\] ]] ; echo ${BASH_REMATCH[0]}