Chinaunix

标题: awk中正则表达中重复次数的限制 [打印本页]

作者: hujysh    时间: 2015-09-14 10:41
标题: awk中正则表达中重复次数的限制


QQ:/tmp>cat /tmp/xxx
C
DA

正则表达式,表示重复次数 用如下办法只能到255

用255可以
QQ:/tmp>awk '{if($0 ~ "^.{0,255}$") print "OK"; else print "BAD"}' /tmp/xxx
OK
OK

用256不可以
QQ:/tmp>awk '{if($0 ~ "^.{0,256}$") print "OK"; else print "BAD"}' /tmp/xxx
BAD
BAD
QQ:/tmp>


grep "^.\{0,256\}$" /tmp/xxx
会报错:
Invalid \{\} repetition.

用255则可以。

这个255的限制有没有办法突破呢???


作者: MMMIX    时间: 2015-09-14 10:47
回复 1# hujysh


    干嘛非得用正则不可?你是要解决问题还是要测试awk正则的极限?
作者: ly5066113    时间: 2015-09-14 10:50
回复 1# hujysh


估计是版本问题:
  1. $ awk --posix '{if($0 ~ "^.{1,2000}$") print "OK"; else print "BAD"}' file
  2. OK
  3. OK
复制代码

作者: hujysh    时间: 2015-09-14 11:05
回复 3# ly5066113


    AIX的机器,没有 --posix 选项
作者: ly5066113    时间: 2015-09-14 11:11
回复 4# hujysh


版本不同而已,说你的原始需求吧,都是可以解决的。
作者: hujysh    时间: 2015-09-14 11:11
回复 2# MMMIX

要解决问题,问题简化后就是我帖子里面说的。

实际上,是一个检查文件合法性的脚本,检查规则由用户自己配置,他们想用这种类似的配置来检查长度(长度可变,有个范围),

用正则表达式的原因,他们可以定制不同行的不同规则,可以到具体内容的检查。
   
作者: hujysh    时间: 2015-09-14 11:14
6楼有应用的简单说明。

谢谢!

回复 6# ly5066113


   
作者: jason680    时间: 2015-09-14 11:15
回复 4# hujysh

$ grep -P "^.{0,300}$" /tmp/xxx
C
DA

$ perl -lane  "{print if(/^.{0,300}$/)}" /tmp/xxx
C
DA

Note: It's NOT a good idea for your problem

   
作者: ly5066113    时间: 2015-09-14 11:17
回复 7# hujysh


长度可以用 length
  1. $ awk '{if(length>=0&&length<=256) print "OK"; else print "BAD"}' file
  2. OK
  3. OK
复制代码

作者: hujysh    时间: 2015-09-14 11:29
回复 9# ly5066113


是的。谢谢!

这样做要放弃正则了。
作者: hujysh    时间: 2015-09-14 11:33
回复 8# jason680


    好吧。方法很多。
我的机器上没有perl ,   grep不支持-P
我只能绕道了。


作者: ly5066113    时间: 2015-09-14 11:47
回复 10# hujysh


1、没有必要放弃正则,2者是不冲突的,可以同时使用。
2、AIX 默认都是安装了 perl 的,执行 perl -v 试试
作者: jason680    时间: 2015-09-14 13:08
@ly5066113 @hujysh
又是X-Y problem
http://bbs.chinaunix.net/thread-4118053-1-1.html
作者: hujysh    时间: 2015-09-14 15:12
回复 13# jason680


我不觉得是x-y   

我提的问题是针对现有解决方案的,但是碰到问题了,看大家有没有办法。

结果是,限于版本,限于程序既定框架,这条路没有办法。

谢谢大家的思路!


最后的方案是:
保留使用正则表达式对具体内容进行检查;
使用awk里length函数对长度进行检查。

这样程序修改比较小。






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2