免费注册 查看新帖 |

Chinaunix

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

expect -re如何匹配括号() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-07 18:44 |只看该作者 |倒序浏览
本帖最后由 icetown 于 2012-03-07 18:52 编辑

脚本parentheses.sh
#!/bin/bash
echo ”helloworld@/pvob (base@/pvob) (non-modifiable)“

试着用expect -re去匹配,但总是匹配失败。
set TEMP 0
spawn parentheses
expect {
        -re ".*@/.* \(.*@/.*\) \(non-modifiable\) " { set TEMP $expect_out(0,string)}
        timeout { send_user "ERROR!!!\n"}
}
send_user "$TEMP\n"

如果单独匹配non-modifiable部分,则只能匹配到字母,不能匹配到圆括号。
set TEMP 0
spawn parentheses
expect {
        -re "\(non-modifiable\) " { set TEMP $expect_out(0,string)}
        timeout { send_user "ERROR!!!\n"}
}
send_user "$TEMP\n"
这种情况的结果是non-modifiable,不带括号。

不知道啥原因?有高人能解答一下不?

论坛徽章:
0
2 [报告]
发表于 2012-03-07 19:21 |只看该作者
或者如何能匹配第二行?

将脚本parentheses.sh修改一下,
#!/bin/bash
echo "foundation baselines:"
echo "helloworld@/pvob (base@/pvob) (non-modifiable)"

知道第一行的关键字是foundation baselines:
如何匹配第二行?并获取到其内容。

论坛徽章:
0
3 [报告]
发表于 2012-03-08 16:29 |只看该作者
没人会啊?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2012-03-08 16:40 |只看该作者
-re {.*@/.* \(.*@/.*\) \(non-modifiable\) }

论坛徽章:
0
5 [报告]
发表于 2012-03-09 13:31 |只看该作者
按照waker的方法:

parentheses.sh脚本如下:
      1 #!/bin/bash
      2 echo "  development streams:"
      3 echo "  contains activities:"
      4 echo "  foundation baselines:"
      5 echo "    helloworld@/pvob (base@/pvob) (non-modifiable)"

parentheses.exp脚本如下:
      1 #!/usr/bin/expect
      2 set TEMP 0
      3 spawn parentheses.sh
      4 expect {
      5         -re {.*@/.* \(.*@/.*\) \(non-modifiable\)} { set TEMP $expect_out(0,string)}
      6         timeout { send_user "ERROR!!!\n"}
      7 }
      8 send_user "=======$TEMP\n"

执行结果:
xi@she0e3>expect parentheses.exp
execution expect-5.39/expect (shanghai/rncenv/linux2)
spawn parentheses.sh
  development streams:
  contains activities:
  foundation baselines:
    helloworld@/pvob (base@/pvob) (non-modifiable)
=======  development streams:
  contains activities:
  foundation baselines:
    base@/pvob (base@/pvob) (non-modifiable)


估计是把(base@/pvob) (non-modifiable)之前的整个都当做.*@/.*了,
所以改了一下脚本,在-re {.*@/.* \(.*@/.*\) \(non-modifiable\)}之前加了个4个空格,即-re {    .*@/.* \(.*@/.*\) \(non-modifiable\)},就OK了。
另外,{}的效果和""一样,即-re "    .*@/.* \(.*@/.*\) \(non-modifiable\)"也OK。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP