免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4832 | 回复: 26
打印 上一主题 下一主题

[文本处理] 一个使用正则表达式作为分隔符的拆行问题,有些难度,请大神帮忙解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-29 10:26 |只看该作者 |倒序浏览
本帖最后由 junhengwoo 于 2015-12-29 17:04 编辑

有下面这种格式的文本,采用“[[0-9]-[0-9]{3}.[0-9]{4}\]”作为分隔符进行分拆,拆成的内容(带上分隔符)每个为一行。
  1. [1-124.5081] 123aaa5[5]5aaa321f  sfsa [0-125.5082] 123bbb5[5]5bbb321f  fdsfddsfsda   [2-125.5083] 123ccc5[5]5ccc  fdsfds321fsfasf[2-125.5083]a[2-125.5083]234
  2. [4-124.5084] 123ddd5[5]5dddfd  sfsa321 [5-125.5085] 123eee5[5]fdsffd  sfsafd   [6-125.5086] 123fff5[5]5fff fdsafdsdfs321   [7-125.5087] 123ggg5[5]5gg g32fsdfd1
复制代码
分拆后的内容格式如下:
  1. [1-124.5081] 123aaa5[5]5aaa321f  sfsa
  2. [0-125.5082] 123bbb5[5]5bbb321f  fdsfddsfsda   
  3. [2-125.5083] 123ccc5[5]5ccc  fdsfds321fsfasf
  4. [2-125.5083]a
  5. [2-125.5083]234
  6. [4-124.5084] 123ddd5[5]5dddfd  sfsa321
  7. [5-125.5085] 123eee5[5]fdsffd  sfsafd   
  8. [6-125.5086] 123fff5[5]5fff fdsafdsdfs321   
  9. [7-125.5087] 123ggg5[5]5gg g32fsdfd1
复制代码
请大神们帮忙指导该如何实现

谢谢啦   

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
2 [报告]
发表于 2015-12-29 10:39 |只看该作者
本帖最后由 WilliBhamlll 于 2015-12-29 10:40 编辑
  1. sed 's/[a-z]\+ \+/&\n/g' file
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
3 [报告]
发表于 2015-12-29 10:47 |只看该作者
本帖最后由 songyc_2015 于 2015-12-29 11:00 编辑

回复 1# junhengwoo
  1. xargs -n2 < file
  2. grep -Po '\[\d-\d{3}.\d{4}\] *\w+' file
  3. awk -vRS="\\\[[^]]+\\\]" 'NF{print s,$1}{s=RT}' file
复制代码

论坛徽章:
0
4 [报告]
发表于 2015-12-29 10:55 |只看该作者
谢谢  

我那个文件的内容格式比较复杂,我重新更新了测试样例文件,请再帮忙看看  



WilliBhamlll 发表于 2015-12-29 10:39

论坛徽章:
0
5 [报告]
发表于 2015-12-29 10:57 |只看该作者
谢谢   

我那个文件的内容格式比较复杂,我重新更新了测试样例文件,请再帮忙看看  


songyc_2015 发表于 2015-12-29 10:47
回复 1# junhengwoo

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
6 [报告]
发表于 2015-12-29 11:06 |只看该作者
回复 4# junhengwoo
  1. sed 's/ \(\[\)/\n\1/g' file
复制代码

论坛徽章:
0
7 [报告]
发表于 2015-12-29 11:07 |只看该作者

RE: 一个使用正则表达式作为分隔符的拆行问题,有一定的难度

我试了你说的方法,都不行哦
那个文件还是有些复杂的,所以必须要用“[[0-9]-[0-9]{3}.[0-9]{4}\]”这个来作为分行的标志。

请再帮忙看看哈  
  1. xargs -n2 < file
  2. grep -Po '\[\d-\d{3}.\d{4}\] *\w+' file
  3. awk -vRS="\\\[[^]]+\\\]" 'NF{print s,$1}{s=RT}' file
复制代码
songyc_2015 发表于 2015-12-29 10:47
回复 1# junhengwoo

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
8 [报告]
发表于 2015-12-29 11:07 |只看该作者
本帖最后由 songyc_2015 于 2015-12-29 11:16 编辑

回复 5# junhengwoo
  1. awk --re-interval -vRS='\\[.-.{3}\\..{4}\\]|\n' 'NF{print s,$0}{s=RT}' file
  2. grep -Po '\[\d-\d{3}.\d{4}\].*?(?=\[\d-\d{3}.\d{4}\])' file
复制代码
grep有bug,坐等大神。。。。干活去。。。。

论坛徽章:
0
9 [报告]
发表于 2015-12-29 11:13 |只看该作者
你说的这个方法在我的环境中报错了,--re-interval这个参数应该不支持。
  1. zxin10@ubuntu:~/vmshare/dev/sh$ awk --re-interval -vRS='\\[.-.{3}\\..{4}\\]|\n' 'NF{print s,$0}{s=RT}' file
  2. awk: not an option: --re-interval
  3. xin10@ubuntu:~/vmshare/dev/sh$ awk -W version
  4. mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

  5. compiled limits:
  6. max NF             32767
  7. sprintf buffer      1020
  8. zxin10@ubuntu:~/vmshare/dev/sh$
复制代码
songyc_2015 发表于 2015-12-29 11:07
回复 5# junhengwoo

论坛徽章:
0
10 [报告]
发表于 2015-12-29 11:16 |只看该作者
grep这个方法,好像可行,但是会漏掉一些数据。
请再帮忙看看 谢谢
  1. zxin10@ubuntu:~/vmshare/dev/sh$ cat file
  2. [1-124.5081] 123aaa5[5]5aaa321f  sfsa [0-125.5082] 123bbb5[5]5bbb321f  fdsfddsfsda   [2-125.5083] 123ccc5[5]5ccc  fdsfds321fsfasf
  3. [4-124.5084] 123ddd5[5]5dddfd  sfsa321 [5-125.5085] 123eee5[5]fdsffd  sfsafd   [6-125.5086] 123fff5[5]5fff fdsafdsdfs321   [7-125.5087] 123ggg5[5]5gg g32fsdfd1zxin10@ubuntu:~/vmshare/dev/sh$
  4. zxin10@ubuntu:~/vmshare/dev/sh$ grep -Po '\[\d-\d{3}.\d{4}\].*?(?=\[\d-\d{3}.\d{4}\])' file
  5. [1-124.5081] 123aaa5[5]5aaa321f  sfsa
  6. [0-125.5082] 123bbb5[5]5bbb321f  fdsfddsfsda   
  7. [4-124.5084] 123ddd5[5]5dddfd  sfsa321
  8. [5-125.5085] 123eee5[5]fdsffd  sfsafd   
  9. [6-125.5086] 123fff5[5]5fff fdsafdsdfs321   
复制代码
songyc_2015 发表于 2015-12-29 11:07
回复 5# junhengwoo
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP