免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: freeman731
打印 上一主题 下一主题

egrep 的模式匹配问题 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
11 [报告]
发表于 2009-10-16 22:36 |只看该作者
就是3个([abc]|255)

论坛徽章:
0
12 [报告]
发表于 2009-10-16 22:57 |只看该作者

回复 #11 blackold 的帖子

黑哥的MJ还是Fans?

  1. [rockfall@Rocfall ~/download]$echo "abc222ddd255" | egrep -o '([abc]|255){3}'
  2. abc
  3. [rockfall@Rocfall ~/download]$echo "abc222ddd255" | egrep -o '([abc]|25[5]){3}'
  4. [rockfall@Rocfall ~/download]$

复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
13 [报告]
发表于 2009-10-16 22:59 |只看该作者

回复 #12 haimming 的帖子

晕,怎么又冒出来个blackold?

看看这几个输出什么?
echo "abc222ddd255" | egrep -o '([abc]|25[5])'
echo "abc222ddd255" | egrep -o '([abc]|25[5]){1}'
echo "abc222ddd255" | egrep -o '([abc]|25[5]){2}'

[ 本帖最后由 blackold 于 2009-10-16 23:00 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-10-16 23:25 |只看该作者

回复 #13 blackold 的帖子

黑哥,以后你晚上别去洗澡了,别让人假冒了

  1. [rockfall@Rocfall /]$echo "abc222ddd255" | egrep -o '([abc]|25[5])'
  2. a
  3. b
  4. c
  5. 255
  6. [rockfall@Rocfall /]$echo "abc222ddd255" | egrep -o '([abc]|25[5]){1}'
  7. a
  8. b
  9. c
  10. 255
  11. [rockfall@Rocfall /]$echo "abc222ddd255" | egrep -o '([abc]|25[5]){2}'
  12. [rockfall@Rocfall /]$

复制代码

论坛徽章:
0
15 [报告]
发表于 2009-10-17 10:27 |只看该作者


  1. hello@world:~$ echo "abc222ddd255" | egrep -o '([abc]|25[5])'
  2. a
  3. b
  4. c
  5. 255
  6. hello@world:~$ echo "abc222ddd255" | egrep -o '([abc]|25[5]){1}'
  7. a
  8. b
  9. c
  10. 255
  11. hello@world:~$ echo "abc222ddd255" | egrep -o '([abc]|25[5]){2}'
  12. hello@world:~$ echo "abc222ddd255255255255" | egrep -o '([abc]|25[5]){2}'
  13. ab
  14. 255255
  15. 255255
  16. hello@world:~$

复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
16 [报告]
发表于 2009-10-17 10:43 |只看该作者

回复 #15 freeman731 的帖子

你这个echo "abc222ddd255255255255" | egrep -o '([abc]|25[5]){2}'
的结果和haimming 的又不同了。

奇怪!是否与locale有关?

试试这一两个命令:

echo "abc222ddd255255255255" | egrep -o '([[:alpha:]]|25[[:digit:]]){3}'
LC_ALL=C echo "abc222ddd255255255255" | egrep -o '([abc]|25[5]){2}'

[ 本帖最后由 blackold 于 2009-10-17 10:47 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2009-10-17 14:12 |只看该作者

  1. hello@world:~$
  2. hello@world:~$echo "abc222ddd255255255255" | egrep -o '([[:alpha:]]|25[[:digit:]]){3}'
  3. abc
  4. ddd
  5. 255255255
  6. hello@world:~$LC_ALL=C echo "abc222ddd255255255255" | egrep -o '([abc]|25[5]){2}'
  7. ab
  8. 255255
  9. 255255
  10. hello@world:~$

复制代码

论坛徽章:
0
18 [报告]
发表于 2009-10-17 14:24 |只看该作者

回复 #16 blackold 的帖子

表达式'25[5]' 不是等价于 表达式 '255' 吗?
所以表达式 '([abcd]|25[5]){3}' 就应该等价于 '([abcd]|255){3}'

GNU grep 2.5.4版本的 grep 可能有BUG, 在grep 2.5.4中输入以下2个命令 :
echo 'abcdefg' | egrep -o '([abcd]|255){3}'    #此命令有输出结果, 输出结果是  'abc'
echo 'abcdefg' | egrep -o '([abcd]|25[5]){3}'  # 此命令却没有输出结果

经过验证, 在grep 2.5.4中,
表达式 '([abcd]|255){3}' 可以匹配 3个[abcd]以内的字母, 或者匹配3个255.
但是表达式 '([abcd]|25[5]){3}' 不能匹配 3个 [abcd]以内的字母, 却可以匹配3 个255.

这应该是BUG吧?还是现在的扩展的正则表达式有变化了?
不知道本人这样分析是否正确。

论坛徽章:
0
19 [报告]
发表于 2009-10-17 14:29 |只看该作者
hello@world:~$ echo "abc222ddd255" | egrep -o '([abc]|25[5]){2}'
#上面的命令没有输出结果, 说明表达式 '([abc]|25[5]){2}' 没匹配成功.
hello@world:~$ echo "abc222ddd255255255255" | egrep -o '([abc]|25[5]){2}'
ab
255255
255255
#上面的命令把echo 的命令改了, 表达式'([abc]|25[5]){2}' 却可以匹配 字符串"ab"了.为什么第一个命令就没有输出"ab"呢?
#很奇怪.
hello@world:~$

论坛徽章:
0
20 [报告]
发表于 2009-10-17 14:34 |只看该作者
再次实验了一次,
在 grep 2.5.3中,
命令 echo "abc222ddd255" | egrep -o '([abc]|25[5]){2}' 的输出结果是 ab

在grep 2.5.4中,
命令没有任何输出结果.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP