- 论坛徽章:
- 0
|
bash 3早就出来了, cygwin中也早就用上了, 却一直在处理正则表达式相关的任务时使用grep/sed/awk/perl之类, 没想到bash 3中已经有了内置的正则表达式支持, 不是那个简单的globbing啦, 是真正的regex(7)支持, 如:(测试的是 cygwin下的3.1.17(6)-release )
[[ "zhang wang li zhao" =~ "([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)" ]]
echo ${BASH_REMATCH}
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
echo ${BASH_REMATCH[3]}
echo ${BASH_REMATCH[4]}
结果是:
zhang wang li zhao
zhang
wang
li
zhao
下面这个也是支持的:
[[ "zhang" =~ "z{1,8}" ]] && echo yes
可以省略后面的那个数字
[[ "zhang" =~ "z{1,}" ]] && echo yes
但不能省略前面的:
[[ "zhang" =~ "z{,8}" ]] && echo yes
这个命令就匹配失败了.
对于错误的正则表达式, 如:
[[ "zhang" =~ "[3" ]] && echo yes
或
[[ "zhang" =~ "*" ]] && echo yes
表面上看bash都是闷声不响的, 其实可以通过返回值为2检测出来, 如果是正则表达式本身正确但匹配失败, 返回的是1.
记得使用双份加厚的[[ 和 ]]哦, []是不行的.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8681/showart_1075599.html |
|