免费注册 查看新帖 |

Chinaunix

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

[文本处理] 定位字符串 截取匹配格式之间行 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2023-08-22 17:57 |只看该作者 |倒序浏览
本帖最后由 unix520 于 2023-08-23 15:59 编辑
  1. 请以文本中倒数第一个含有 " 新增" 的字符串的行, 匹配该行其中一个字符串格式 /([0-9A-Z]{1,2}:){4}[0-9A-Z]{1,2}/ , 截取文本中所有该相同名称字符串至 "结束" 之间行,    "新增" 至  "结束" 可能中间会有很多行  , 或不是相邻
复制代码
  1. awk '/([0-9A-Z]{1,2}:){4}[0-9A-Z]{1,2}/,/结束/' 1.txt    这个会全部输出
复制代码
  1. a 新增  01:02:03:04:05:06 (
  2. b 结束

  3. c 新增  A1:A2:A3:A4:A5:A6 (
  4. d 结束


  5. e 新增  U 01:02:03:04:05:06 (
  6. f 结束

  7. g 新增  01:02:03:04:05:06 (
  8. f 结束

  9. v 01:02:03:04:05:06
复制代码


截取到所有名称至"结束" 之间行
应该要得到
2.txt
  1. a 新增  01:02:03:04:05:06 (
  2. b 结束


  3. e 新增  U 01:02:03:04:05:06 (
  4. f 结束

  5. g 新增  01:02:03:04:05:06 (
  6. f 结束
复制代码


Thanks


论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
2 [报告]
发表于 2023-08-23 10:06 |只看该作者
Sorry,根本看不懂需求。

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
3 [报告]
发表于 2023-08-23 11:28 |只看该作者
本帖最后由 unix520 于 2023-08-23 12:46 编辑

回复 2# legs




如果倒数中发现第一个有 "新增" 字符串的行,   该行其中有一个字符串名称是一种格式, 但在该行位置不固定   需找出所有该名称至结束之间行
匹配该格式名称
  1. /([0-9A-Z]{1,2}:){2}[0-9A-Z]{1,2}/
复制代码

e 新增  00:01:02 (





论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
4 [报告]
发表于 2023-08-23 13:38 |只看该作者
本帖最后由 legs 于 2023-08-23 13:40 编辑
unix520 发表于 2023-08-23 11:28
回复 2# legs如果倒数中发现第一个有 "新增" 字符串的行,   该行其中有一个字符串名称是一种格式, 但在该行 ...

更看不懂了,你这描述得关键信息非常含糊,都没有看明白为啥有两行被排除了。懂的人解答吧,我是真看不明白。
你这两行字,一共用逗号分成了四个半句,每一个半句都没有看懂。

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
5 [报告]
发表于 2023-08-23 14:15 |只看该作者
本帖最后由 unix520 于 2023-08-23 14:16 编辑

回复 4# legs

v 31:00:01
倒数第一行 虽然格式能匹配, 但没有" 新增"字段


c 新增  10:11:12 (
虽然有" 新增"字段,    但是要匹配字符串名称不相同


论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
6 [报告]
发表于 2023-08-23 14:45 |只看该作者
unix520 发表于 2023-08-23 14:15
回复 4# legs v 31:00:01倒数第一行 虽然格式能匹配, 但没有" 新增"字段c 新增  10:11:12 (虽然有" 新增"字 ...

看不懂,看不出来c,d两行跟a,b两行有什么区别,格式什么的一模一样,除了时间不一样,你要匹配精确时间,你直接写字面量就得了,干嘛要写正则?

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
7 [报告]
发表于 2023-08-23 15:58 |只看该作者
本帖最后由 unix520 于 2023-08-23 16:04 编辑

回复 6# legs

    不是时间   这是ㄧ串ID格式   由于太长原因 我减少了几个 01:02:03:04:05:06
至于其他不用理会      在顶楼已更正

至于加上a b c d 隔开, 是防止匹配了开头字段  "^新增"  "^结束"

论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
8 [报告]
发表于 2023-08-23 16:09 |只看该作者
本帖最后由 legs 于 2023-08-23 16:19 编辑

是不是这个意思:根据全文最后一处有“新增”和这行的时间值,根据这个时间值的内容查找文本中所有“新增“至”结尾“的段?
perl -0nE'($s)=/\X+\N*?新增\N*(\d\d:\d\d:\d\d)/;say$&while/\N*?新增\N*?$s\X*?结束\N*/g' file

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
9 [报告]
发表于 2023-08-23 16:28 |只看该作者
本帖最后由 unix520 于 2023-08-23 16:34 编辑

回复 8# legs

对,,差不多这意思,   不是时间   这是ㄧ串ID格式, (\d\d:\d\d:\d\d) 如有大写字母咋办,  200MB文件 效率也很重要,,越快越好


论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
10 [报告]
发表于 2023-08-23 19:22 |只看该作者
本帖最后由 unix520 于 2023-08-24 15:44 编辑

回复 8# legs


A1:A2:A3:A4:A5:A6
1A:2A:3A:4A:5A:6A
谢谢大侠,  改了正则匹配是可以的  "[0-9A-Z]+:"      不过好慢啊

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP