当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-04 13:39 

注册: 2007-07-20 10:12
帖子: 81
送出感谢: 0 次
接收感谢: 0 次
如题,gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
grep可以匹配到,怎么gawk匹配不到,gawk里面的正则表达式是可以用x{m}的形式的啊
注:用\{3\}也匹配不到


页首
 用户资料  
 
2 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-06 1:04 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
这里涉及到gawk的两个问题,如果是第一次遇到都会很迷惑:

1. 在非英文的locale下,默认的英文字母排序方式可能不在是ASCII顺序,即ABCD...XYZabcd...xyz
例如,可能是AaBbCc...Zz或 aAbBcC...zZ,对于中文环境,似乎是后者。那么显而易见[A-Z]也匹配小写字母而[a-z]也匹配大写字母。所以最好用[[:upper:]]和[[:lower:]]来代表大写和小写字母,如果非要用[A-Z]来匹配大写字母的话,可以用设定locale,比如

LANG=C gawk '/A-Z/ {print}' ....

2. 区间操作 {n}, {n,}, {n,m} 等只有在使用 --posix 和 --re-interval 选项时才有效
关于这点,gawk的manpage里提到了
代码:
       r{n}
       r{n,}
       r{n,m}     One or two numbers inside braces denote an interval expression.  If there is one number in the braces, the preceding regular  expression  r  is  repeated  n times.  If there are two numbers separated by a comma, r is repeated n to m times.  If there is one number followed by a comma, then r is repeated at least n times. Interval expressions are only available if either --posix or --re-interval is specified on the command line.


最后由 goodluck1982 编辑于 2008-12-08 10:45,总共编辑了 1 次

页首
 用户资料  
 
3 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-06 16:53 

注册: 2007-07-20 10:12
帖子: 81
送出感谢: 0 次
接收感谢: 0 次
首先感谢回复,而且答案也应该是正确的,但是用grep和sed在相同的控制台上[A-Z]就只是匹配大写字符
你说的第一点,是特指gawk的实现问题吗

默认的英文排序确实是不是ASCII顺序,是aAbB...zZ

goodluck1982 写道:
这里涉及到个问题,如果是第一次遇到都会很迷惑:

1. 在非英文的locale下,默认的英文字母排序方式可能不在是ASCII顺序,即ABCD...XYZabcd...xyz
例如,可能是AaBbCc...Zz或 aAbBcC...zZ,对于中文环境,似乎是后者。那么显而易见[A-Z]也匹配小写字母而[a-z]也匹配大写字母。所以最好用[[:upper:]]和[[:lower:]]来代表大写和小写字母,如果非要用[A-Z]来匹配大写字母的话,可以用设定locale,比如

LANG=C gawk '/A-Z/ {print}' ....

2. 区间操作 {n}, {n,}, {n,m} 等只有在使用 --posix 和 --re-interval 选项时才有效
关于这点,gawk的manpage里提到了
代码:
       r{n}
       r{n,}
       r{n,m}     One or two numbers inside braces denote an interval expression.  If there is one number in the braces, the preceding regular  expression  r  is  repeated  n times.  If there are two numbers separated by a comma, r is repeated n to m times.  If there is one number followed by a comma, then r is repeated at least n times. Interval expressions are only available if either --posix or --re-interval is specified on the command line.


最后由 lujinke 编辑于 2008-12-06 19:35,总共编辑了 3 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-06 17:01 
头像

注册: 2007-01-06 21:00
帖子: 920
送出感谢: 2
接收感谢: 0 次
2楼是regex的高手阿


页首
 用户资料  
 
5 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 10:43 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
回复3楼

这个只是 gawk 的特性,与grep等无关,
而且关于[A-Z]的理解并非gawk的bug似乎是有意这样实现的
每个支持正则表达式的程序都有一套关于正则表达式的自己的定义
整体上虽说一样,但细节上或许不同
用时需要注意


页首
 用户资料  
 
6 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 10:45 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
princelai 写道:
2楼是regex的高手阿


高手不敢当
只是善于google,善于man罢了


页首
 用户资料  
 
7 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 10:57 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
[A-Za-z]?


_________________
● 鸣学


页首
 用户资料  
 
8 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 14:49 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
楼上想说什么?


页首
 用户资料  
 
9 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 15:13 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ dog /boot/grub/grub.cfg |grep -o '[A-Za-z]\{7\}'
default
timeout
unicode
gfxmode
gfxterm
termina
gfxterm
backgro
desktop
highlig
magenta
highlig
你想说什么哦。呵呵


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-08 21:09 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
还是不明白楼上到底想说明什么问题。

代码:
[12-06 18:24> ~]#  cat /boot/grub/menu.lst |grep -o '[A-Za-z]\{7\}'
generat                                                           
anacond                                                           
changes                                                           
partiti                                                           
relativ                                                           
vmlinuz                                                           
version                                                           
version                                                           
default
timeout
splashi
hiddenm
vmlinuz
vmlinuz
Windows
rootnov
chainlo
[12-06 18:24> ~]# gawk  '/[A-Za-z]\{7\}/ {print}'  /boot/grub/menu.lst
[12-06 18:24> ~]# gawk  '/[A-Za-z]{7}/ {print}'  /boot/grub/menu.lst
[12-06 18:24> ~]# gawk  --posix '/[A-Za-z]{7}/ {print}'  /boot/grub/menu.lst
# grub.conf generated by anaconda
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          kernel /vmlinuz-version ro root=/dev/sda12
#          initrd /initrd-version.img
default=0
timeout=5
splashimage=(hd0,6)/grub/splash.xpm.gz
hiddenmenu
        kernel /vmlinuz-2.6.25.14-108.fc9.i686 ro root=UUID=718df761-8b0a-45ca-a752-73bf8e0d099e rhgb quiet
        kernel /vmlinuz-2.6.25-14.fc9.i686 ro root=UUID=718df761-8b0a-45ca-a752-73bf8e0d099e rhgb quiet
title Windows
        rootnoverify (hd0,0)
        chainloader +1
[12-06 18:24> ~]#


页首
 用户资料  
 
11 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-09 8:56 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
[A-Z][a-z]{3} 不是这样写的。这是2个因子了啊。
[A-Za-z]\{7\} 这才是正则啊。


_________________
● 鸣学


页首
 用户资料  
 
12 楼 
 文章标题 : Re: gawk '/^[A-Z][a-z]{3}/{print}‘怎么匹配不到Sjjj
帖子发表于 : 2008-12-09 15:58 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
[A-Z][a-z]{3} 不是这样写的。这是2个因子了啊。
[A-Za-z]\{7\} 这才是正则啊。


首先看你要匹配什么了,如LZ所说,匹配 Sjjj 的话
用 [A-Z][a-j]<重复3次> 应该可以才对
至于 <重复3次> 是用 {3} 还是 \{3\} ,不同程序中的定义是不一样的
grep 默认使用 \{3\}
而gawk 则使用 {3}

我想说的只是,即使你写对了正则表达式,
用gawk时如果不注意 2楼 中说的两点
依然会使人困惑的!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译