- 论坛徽章:
- 0
|
刚开始学习linux1个月,在大致读完PC篇后想先从SHELL学起,之后再学习Python。用的参考书是linux命令行与shell脚本编程大全。目前学到了正则表达式的部分,但是有疑问,得到希望各位前辈的指教,先谢谢大家了。
从最开始说起吧,都是关于gawk匹配语句的
第一个问题是这样的:echo "bt"|gawk '/b[ae]?t/{print $0}',echo "bat"|gawk '/b[ae]?t/{print $0}',echo "bet"|gawk '/b[ae]?t/{print $0}',echo "beat"|gawk '/b[ae]?t/{print $0}'都匹配上了没毛病,问题是我不能理解为什么echo "bot"|gawk '/b[ae]?t/{print $0}'这样一条语句是不能匹配的。书中说“?”表示字符组中的数字出现了0或1次就匹配成功,bt是因为中间没有字符,所以是0次,匹配成功,bot因为中间是o,并没有出现a或者e,那是不是应该也是0次,为什么匹配不成功?
第二个问题:和上面很类似echo "beot"|gawk '/b[ae]+t/{print $0}'为什么同样无法匹配
再来第三个:echo "beaot"|gawk --re-interval '/b[ae]{1,2}t/{print $0}'无法匹配,但是修改前面的语句变为echo "beaot"|gawk --re-interval '/b[ae]{1,2}/{print $0}'是可以匹配的,为什么
最后一个问题,书中说echo "saturday"|gawk '/sat(urday)?/{print $0}'匹配上,我自己尝试分别使用echo “saturday1”、"sat1urday"、"sat1u2rday"都能匹配上,后来我修改语句为echo "saturday"|gawk '/sat(urda)?y/{print $0}'时,发现saturday1234也能匹配上,但是当echo “saturda2y”、"sat1urday"、"sat1u2rday"都是无法匹配的,请问为什么?我是哪个地方没有理解透彻?
最后先谢谢大家的宝贵时间,求指教!
|
|