unix520 发表于 2023-08-22 17:57

定位字符串 截取匹配格式之间行

本帖最后由 unix520 于 2023-08-23 15:59 编辑

请以文本中倒数第一个含有 " 新增" 的字符串的行, 匹配该行其中一个字符串格式 /({1,2}:){4}{1,2}/ , 截取文本中所有该相同名称字符串至 "结束" 之间行,    "新增" 至"结束" 可能中间会有很多行, 或不是相邻awk '/({1,2}:){4}{1,2}/,/结束/' 1.txt    这个会全部输出a 新增01:02:03:04:05:06 (
b 结束

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


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

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

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

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


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

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

Thanks


legs 发表于 2023-08-23 10:06

Sorry,根本看不懂需求。

unix520 发表于 2023-08-23 11:28

本帖最后由 unix520 于 2023-08-23 12:46 编辑

回复 2# legs




如果倒数中发现第一个有 "新增" 字符串的行,   该行其中有一个字符串名称是一种格式, 但在该行位置不固定   需找出所有该名称至结束之间行
匹配该格式名称
/({1,2}:){2}{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
谢谢大侠,改了正则匹配是可以的"+:"      不过好慢啊

页: [1] 2
查看完整版本: 定位字符串 截取匹配格式之间行