定位字符串 截取匹配格式之间行
本帖最后由 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
Sorry,根本看不懂需求。 本帖最后由 unix520 于 2023-08-23 12:46 编辑
回复 2# legs
如果倒数中发现第一个有 "新增" 字符串的行, 该行其中有一个字符串名称是一种格式, 但在该行位置不固定 需找出所有该名称至结束之间行
匹配该格式名称
/({1,2}:){2}{1,2}/
e 新增00:01:02 (
本帖最后由 legs 于 2023-08-23 13:40 编辑
unix520 发表于 2023-08-23 11:28
回复 2# legs如果倒数中发现第一个有 "新增" 字符串的行, 该行其中有一个字符串名称是一种格式, 但在该行 ...
更看不懂了,你这描述得关键信息非常含糊,都没有看明白为啥有两行被排除了。懂的人解答吧,我是真看不明白。
你这两行字,一共用逗号分成了四个半句,每一个半句都没有看懂。
本帖最后由 unix520 于 2023-08-23 14:16 编辑
回复 4# legs
v 31:00:01
倒数第一行 虽然格式能匹配, 但没有" 新增"字段
c 新增10:11:12 (
虽然有" 新增"字段, 但是要匹配字符串名称不相同
unix520 发表于 2023-08-23 14:15
回复 4# legs v 31:00:01倒数第一行 虽然格式能匹配, 但没有" 新增"字段c 新增10:11:12 (虽然有" 新增"字 ...
看不懂,看不出来c,d两行跟a,b两行有什么区别,格式什么的一模一样,除了时间不一样,你要匹配精确时间,你直接写字面量就得了,干嘛要写正则?
本帖最后由 unix520 于 2023-08-23 16:04 编辑
回复 6# legs
不是时间 这是ㄧ串ID格式 由于太长原因 我减少了几个 01:02:03:04:05:06
至于其他不用理会 在顶楼已更正
至于加上a b c d 隔开, 是防止匹配了开头字段"^新增""^结束"
本帖最后由 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:34 编辑
回复 8# legs
对,,差不多这意思, 不是时间 这是ㄧ串ID格式, (\d\d:\d\d:\d\d) 如有大写字母咋办,200MB文件 效率也很重要,,越快越好
本帖最后由 unix520 于 2023-08-24 15:44 编辑
回复 8# legs
A1:A2:A3:A4:A5:A6
1A:2A:3A:4A:5A:6A
谢谢大侠,改了正则匹配是可以的"+:" 不过好慢啊
页:
[1]
2