免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3022 | 回复: 13

[文本处理] 急,在线等,关于求正则匹配的问题 [复制链接]

论坛徽章:
0
发表于 2015-10-20 15:12 |显示全部楼层
有个文本每行是tab键做分隔符  a.txt
2015 1391 312312 a
2015 1331312312   a(这个电话号码后是有数字,这里被空格代替了)
2014 13912312312 b
2014 18912313912 c
2015 13312F12312 d
2015 FF312F12312 e
2015 13312312312 f
2016 13318918912 g
2015 13012312312 h

1、找出第二列133,189,139 开头的电话号码

2014 13912312312 b
2014 18912313912 c
2015 13312312312 f
2016 13318918912 g
2015 13012312312 h

2、找出第二列133,189,139开头的,并且号码中有空格的
2015 1391 312312 a
2015 1331312312   a

3、  awk '$2 ~/^139{8}/' a.txt
我用这个找出139开头的并且后面跟8位,试了好久都是错的。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2015-10-20 15:16 |显示全部楼层
回复 1# wzl189189


awk --posix '$2 ~/^139{8}/' a.txt


r{n,m}     One  or two numbers inside braces denote an interval expression.  If there is one number in the braces, the preceding regu-
                  lar 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.

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2015-10-20 15:37 |显示全部楼层
本帖最后由 sunzhiguolu 于 2015-10-20 15:50 编辑

回复 1# wzl189189
抱歉, 我的代码对 awk 没有什么帮助. 还是参考楼上大神的吧.

论坛徽章:
0
发表于 2015-10-20 16:13 |显示全部楼层
回复 2# ly5066113

1、找出第二列133,189,139 开头的电话号码

2014 13912312312 b
2014 18912313912 c
2015 13312312312 f
2016 13318918912 g
2015 13012312312 h

2、找出第二列133,189,139开头的,并且号码中有空格的
2015 1391 312312 a
2015 1331312312   a


   这2个脚本如何写?
   

论坛徽章:
0
发表于 2015-10-20 16:14 |显示全部楼层
回复 2# ly5066113


    你写的这个语句是错的

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
发表于 2015-10-20 16:58 |显示全部楼层
1. awk '$2 ~ /^(133|189|139)/ {print $2} ' k.txt

2. 先删除号码里的空格,再过滤
    awk '{n=""; for(i=2;i<NF;i++) {n=sprintf("%s%s", n, $i)} print $1, n, $NF;}' k.txt |
        awk '$2 ~ /^(133|189|139)/ {print $2} '

论坛徽章:
0
发表于 2015-10-20 17:17 |显示全部楼层
回复 6# yjh777

  谢谢,不过你第一个语句是错误的,因为第5行 13312F12312  ,这中间有个“F”,所以要判断后面全是数字,并且手机号码是11位的。

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2015-10-20 17:19 |显示全部楼层
本帖最后由 haooooaaa 于 2015-10-20 17:20 编辑
  1. awk -F '\t' '$2~/^1(39|33|89)[0-9]{8}/{print $2}' a

  2. awk -F '\t' '$2~/^1(39|33|89)[0-9 ]{8}/&&$2~/ /{print $2}' a
复制代码

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
发表于 2015-10-20 17:20 |显示全部楼层
wzl189189 发表于 2015-10-20 17:17
回复 6# yjh777

  谢谢,不过你第一个语句是错误的,因为第5行 13312F12312  ,这中间有个“F”,所以要 ...


嗯,我看的4楼的两个;没注意第一段
    思路一样的,把$2先处理一下把非数字去掉,自己试试吧

论坛徽章:
0
发表于 2015-10-20 17:28 |显示全部楼层
回复 8# haooooaaa


    谢谢,不过你写的是错的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP