Chinaunix

标题: 定位字符串 截取匹配格式之间行 [打印本页]

作者: unix520    时间: 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



作者: legs    时间: 2023-08-23 10:06
Sorry,根本看不懂需求。
作者: unix520    时间: 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 (






作者: legs    时间: 2023-08-23 13:38
本帖最后由 legs 于 2023-08-23 13:40 编辑
unix520 发表于 2023-08-23 11:28
回复 2# legs如果倒数中发现第一个有 "新增" 字符串的行,   该行其中有一个字符串名称是一种格式, 但在该行 ...

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

作者: unix520    时间: 2023-08-23 14:15
本帖最后由 unix520 于 2023-08-23 14:16 编辑

回复 4# legs

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


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



作者: legs    时间: 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两行有什么区别,格式什么的一模一样,除了时间不一样,你要匹配精确时间,你直接写字面量就得了,干嘛要写正则?

作者: unix520    时间: 2023-08-23 15:58
本帖最后由 unix520 于 2023-08-23 16:04 编辑

回复 6# legs

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

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

作者: legs    时间: 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

作者: unix520    时间: 2023-08-23 16:28
本帖最后由 unix520 于 2023-08-23 16:34 编辑

回复 8# legs

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



作者: unix520    时间: 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]+:"      不过好慢啊


作者: unix520    时间: 2023-08-24 13:46
本帖最后由 unix520 于 2023-08-24 15:46 编辑

试了上面大侠的好慢,  有用awk的没
作者: legs    时间: 2023-08-25 08:34
给你一点建议吧:
1.既然都给出文本样例了,就用点心思,就算涉及隐私不方便发原文档,也可以把原文档的最具代表性的一段复制出来,隐私方面的东西改一改就好了,然后根据你发的文本,进行确切描述;
2.问问题不要挤牙膏,本来逛论坛的已经不多了,注册的就更少了,注册的又实名在发贴的就更少得可怜了,不要到最后变成你发的问题都没有人愿意回答了。

自己想想吧。
作者: legs    时间: 2023-08-25 08:41
本帖最后由 legs 于 2023-08-25 08:43 编辑

你看看你这个问题,你补充了多少信息,为什么一开始想不到要交待一下呢?
就算你描述能力很弱,至少样本你还用点心啊。一会说自己给出的不对,改了又改。最后又提效率问题,你一开始干嘛去了?这样来来回回,你不觉得浪费自己和别人的时间吗?如果我很闲的话,我可以给你发十个输出正确,但又都不是你想要的处理方式?你觉得这样有趣?时间不值钱?

作者: unix520    时间: 2023-08-25 16:27
这几天感冒了
作者: wh7211    时间: 2023-08-29 12:30
回复 1# unix520

unix520你好:
下面你发表的主题中均有大家给你的回复,而你却把1楼提问帖的内容修改成了如“谢谢”、“算了 不问了”、“新年快乐”等内容。大家回复帮你解决问题是要耗费时间和精力的,你这样做是对回复人的不尊重,也让该主题失去了参考价值。请恢复这些主题中1楼提问帖的内容。

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4319222
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4319242
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4319228
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4319296



作者: unix520    时间: 2023-08-29 13:30
回复 15# wh7211

没有不尊重意思,   请不要误会哦, 如有一些不当之处,  实在抱歉, 希望大家谅解。已全部更正及还原主题意思
作者: wh7211    时间: 2023-08-29 19:37
回复 1# unix520


  1. cat 1
  2. a 新增  01:02:03:04:05:06 (
  3. b 结束

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

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

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

  10. v 01:02:03:04:05:06

  11. awk '/新增/{a=1;match($0,"(([0-9A-Z]{2}:){5}[0-9A-Z]{2})",b);d[++c]=b[1]}a{e[c]=e[c]?e[c]"\n"$0:$0}/结束/{a=0}END{for(i=1;i<=c;i++){if(d[i]==d[c]){print e[i]"\n">"2"}}}' 1

  12. cat 2
  13. a 新增  01:02:03:04:05:06 (
  14. b 结束

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

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





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