正则表达式 – 合并线条之间,不包括重复模式与sed
发布时间:2020-12-14 05:37:50 所属栏目:百科 来源:网络整理
导读:我有一个包含时间戳的行数的文件,中间有几行.例如, TIMESTAMP MESSAGETRAIL 1TRAIL 2TIMESTAMP MESSAGE2TRAIL 21TRAIL 22 ... 我想将所有跟踪消息添加到一行中,或者更好的是将两个时间戳之间的所有行添加到一行中,以便我的输出看起来像 TIMESTAMP MESSAGE TR
我有一个包含时间戳的行数的文件,中间有几行.例如,
TIMESTAMP MESSAGE TRAIL 1 TRAIL 2 TIMESTAMP MESSAGE2 TRAIL 21 TRAIL 22 ... 我想将所有跟踪消息添加到一行中,或者更好的是将两个时间戳之间的所有行添加到一行中,以便我的输出看起来像 TIMESTAMP MESSAGE TRAIL 1 TRAIL 2 TIMESTAMP MESSAGE2 TRAIL 21 TRAIL 22 ... 我在这里经历了几个类似的问题,但在我的案例中没有任何问题.我试过用 sed -i '/pattern_for_timestamp/{n;:l N;/pattern_for_timestamp/b ; s/n// ; bl}' 但它只会改变模式的每个替代事件.跟踪消息中不需要任何模式.在这种情况下,我更喜欢使用sed或awk. 解决方法
我会去收集空间中的线条直到完成,然后修改和打印,例如:
parse.sed /^TIMESTAMP/ b prn # Run the prn subroutine H # Anything else is appended to hold-space $b prn # Also run prn at end-of-input b # Process next line :prn x # Swap pattern-space and hold-space s/n/ /g # Replace n with space 1!p # Print the result if not on the first line 像这样运行: sed -nf parse.sed infile 或者作为一个单行: sed -n '/^TIMESTAMP/bp;H;$bp;b;:p;x;s/n/ /g;1!p' infile 输出: TIMESTAMP MESSAGE TRAIL 1 TRAIL 2 TIMESTAMP MESSAGE2 TRAIL 21 TRAIL 22 ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |