免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1229 | 回复: 0
打印 上一主题 下一主题

bash 3 中的新特性: 正则表达式的内置支持 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-08 00:29 |只看该作者 |倒序浏览
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP