Chinaunix

标题: grep 或 [打印本页]

作者: guocanwen    时间: 2013-05-17 11:07
标题: grep 或
为什么grep -e  '[0-9]\{5,\}' -e '[3-9][0-9]\{3\}'  dddd 能够工作,而grep -e  '[0-9]\{5,\}|[3-9][0-9]\{3\}' dddd   为什么不返回任何结果?

ps:
grep如何查找一个数字,这个数字大于某个值(比如3000),有没有更快捷的方法。只能用grep
作者: wsleichao3    时间: 2013-05-17 11:26
留个脚印,期待大神门的解答~
作者: 代号:军刀    时间: 2013-05-17 11:55
  1. grep -oP '[3-9]\d{3,}'
复制代码

作者: rdcwayx    时间: 2013-05-17 12:18
试试这个
  1. grep -P  '[0-9]{5,}|[3-9][0-9]{3}'  infile
复制代码

作者: guocanwen    时间: 2013-05-17 12:47
回复 4# rdcwayx
居然把版主引来了
能够实现需求,但是和grep -e  '[0-9]\{5,\}' -e '[3-9][0-9]\{3\}'差不多,除了perl的正则更强大一点外。



   
作者: dn833    时间: 2013-05-17 14:27
楼主可以自行Google一下BRE,ERE,PRE这3个正则流派
作者: seesea2517    时间: 2013-05-17 15:10
  1. # lz 的 1
  2. [seesea@UC ~]$ echo -e "1234\n3333\n00000" | grep -e  '[0-9]\{5,\}' -e '[3-9][0-9]\{3\}'
  3. 3333
  4. 00000

  5. # lz 的 2
  6. [seesea@UC ~]$ echo -e "1234\n3333\n00000" | grep -e  '[0-9]\{5,\}|[3-9][0-9]\{3\}'

  7. # lz 的 2 的修正
  8. [seesea@UC ~]$ echo -e "1234\n3333\n00000" | grep -E  '[0-9]{5,}|[3-9][0-9]{3}'   
  9. 3333
  10. 00000
复制代码

作者: 代号:军刀    时间: 2013-05-17 15:33
回复 7# seesea2517


    我的木有这个问题
作者: cao627    时间: 2013-05-17 15:53
@代号:军刀你的会将3000也找出来,但要楼主如果要找大于3000的,等于3000的不要呢?
作者: seesea2517    时间: 2013-05-17 16:07
回复 8# 代号:军刀


    你的自然没有问题啦。lz 的是 e 和 E 的问题
作者: cao627    时间: 2013-05-17 16:15
本帖最后由 cao627 于 2013-05-17 16:22 编辑
  1. ~$ echo "x13000x3000x3001x03000x03001x103000x010103000" | grep -oP '[0]*[1-9]+\d*[3-9]\d{3}|[0]*[3-9]\d{2}[1-9]'
  2. 13000
  3. 3001
  4. 03001
  5. 103000
  6. 010103000
复制代码

作者: 代号:军刀    时间: 2013-05-17 16:38
本帖最后由 代号:军刀 于 2013-05-17 16:41 编辑

回复 9# cao627
  1. grep -oP '(?!^[0-2]\d{3}$|^0*3000$|^0*[1-2]?\d{1,3}$)^\d+$
复制代码

作者: 代号:军刀    时间: 2013-05-17 16:48
回复 11# cao627


    4000就不会输出
作者: wenhq    时间: 2013-05-17 16:49
回复 12# 代号:军刀

刀哥的Perl环视表达式玩的好牛啊!
awk '$0~/[3[1-9]\d\{2\}\d?*|[4-9]\d\{3\}\d?*]/'

这个不知道OK不?


   
作者: 代号:军刀    时间: 2013-05-17 16:59
回复 14# wenhq


    我的正则菜的,那正则来自mc大神的,你那不ok,awk正则好像不能使用\d
作者: cao627    时间: 2013-05-17 17:09
@代号:军刀是的
以修正
  1. grep -oP '[0]*[1-9]+\d*\d{4}|[0]*3\d{2}[1-9]|\d*[4-9]\d{3}'
复制代码

作者: wenhq    时间: 2013-05-17 17:17
回复 15# 代号:军刀


    恩 我以为支持呢.记忆中是支持的.看来是错误的.
作者: 代号:军刀    时间: 2013-05-17 17:42
回复 16# cao627


    3330不会匹配
作者: cao627    时间: 2013-05-17 18:18
本帖最后由 cao627 于 2013-05-17 18:47 编辑

@代号:军刀是的 多谢找出问题!
再次修改如下:
  1. grep -oP '0*[1-9]+\d*\d{4}|0*3\d{2}[1-9]|0*3[1-9]\d0|0*3\d[1-9]0|0*[4-9]\d{3}'
复制代码

作者: ligangbin117    时间: 2013-11-26 11:00
6楼正解 你要这样grep -e  '[0-9]\{5,\}\|[3-9][0-9]\{3\}' dddd    http://www.infoq.com/cn/news/201 ... f3b2dcf6d4de684257f 回复 1# guocanwen


   




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