我在过滤输出错误文件时遇到了很大问题。 日志文件:
Important some words flags
Line 1
Line 2
...
Line N
Important some words
Line 1
Line 2
...
Line N
Important some words
Line 1
Line 2
...
Line N
Important some words flags
Line 1
Line 2
...
Line N
所以,有些部分有“标志”字,而不是。
所需的输出文件是:
Important some words flags
Line 1
Line 2
...
Line N
Important some words flags
Line 1
Line 2
...
Line N
只有带有行的部分,哪一部分是通过“重要”启动并结束“标记”。
所有部分都有随机数行。
所以我不能使用类似的东西:
grep -B1 -P '!^Important*flags' logfile
因为我不知道该行之后/之前会有多少行......
答案 0 :(得分:4)
有更简洁的方法来处理它,但这很清楚:
awk '/^Important.*flags$/ { p = 1; print; next }
/^Important/ { p = 0; next }
{ if (p) print }'
p
设置为1
,打印该行,然后跳到下一行。p
设置为0
并跳至下一行。p
非零(这意味着标记了最后一条重要的行),则打印它。第一行Important
行前的任何行都会p
0
,因此不会打印出来。
答案 1 :(得分:0)
perl -n0E 'say /(Important\N*flags.*?)(?=Important|$)/sg'