Shell Grep忽略多行
Grep有没有办法使用-v开关来忽略一行及其后的下一行数。它基本上是从日志文件中过滤异常,即Shell Grep忽略多行,shell,grep,Shell,Grep,Grep有没有办法使用-v开关来忽略一行及其后的下一行数。它基本上是从日志文件中过滤异常,即 Valid log entry 1 Exception exceptionname at a.b.c at d.e.f ... Valid log entry 2 grep it制作: Valid log entry 1 Valid log entry 2 我尝试了grep-v异常-a2 但这不起作用 如果您有任何想法,我们将不胜感激。在您的情况下,您可以告诉grep也忽略任
Valid log entry 1
Exception exceptionname
at a.b.c
at d.e.f
...
Valid log entry 2
grep it制作:
Valid log entry 1
Valid log entry 2
我尝试了grep-v异常-a2
但这不起作用
如果您有任何想法,我们将不胜感激。在您的情况下,您可以告诉
grep
也忽略任何包含前导空格的行:
grep -v 'Exception|^\s'
试试awk:
awk -v nlines=2 '/^Exception/ {for (i=0; i<nlines; i++) {getline}; next} 1'
awk-v nlines=2'/^Exception/{for(i=0;i
sed-n'/^Exception/,+2!p'文件名
在glenn jackman的基础上,通过管道传输一些命令,您可以获得before/after行为:
awk -v nlines_after=5 '/EXCEPTION/ {for (i=0; i<nlines_after; i++) {getline};print "EXCEPTION" ;next} 1' filename.txt|\
tac|\
awk -v nlines_before=1 '/EXCEPTION/ {for (i=0; i<nlines_before; i++) {getline}; next} 1'|\
tac
awk-v nlines_after=5'/EXCEPTION/{for(i=0;-v并没有颠倒-A,只是与这个简单的例子相匹配,似乎更容易找到你想要的,而不是消除你不想要的:grep Valid
——注意,在sed中打印前一行比打印后一行更难,因为你需要使用保持缓冲区,这里有一些关于@无用的信息
awk -v nlines_after=5 '/EXCEPTION/ {for (i=0; i<nlines_after; i++) {getline};print "EXCEPTION" ;next} 1' filename.txt|\
tac|\
awk -v nlines_before=1 '/EXCEPTION/ {for (i=0; i<nlines_before; i++) {getline}; next} 1'|\
tac