我可以找到这种模式的线条,但在某些情况下,信息在比赛后的线上。我怎样才能在我的比赛线后面得到这条线?
sed -n '/SQL3227W Record token/p' /log/PLAN_2015-08-16*.MSG >ERRORS.txt
答案 0 :(得分:3)
首先,这看起来像是grep
:
grep -A 1 'SQL3227W Record token' /log/PLAN_2015-08-16*.MSG >ERRORS.txt
(-A 1
表示在匹配后打印额外的 1 行 A 。
其次,如果您使用的是GNU sed
,则可以使用+1
的第二个地址:
sed -n '/SQL3227W Record token/,+1p' /log/PLAN_2015-08-16*.MSG >ERRORS.txt
否则,(如果你真的必须使用非Gnu sed
),那么每次匹配时,将以下行附加到模式空间。在继续循环之前删除第一行(如果第二行也匹配)。
未经测试的代码:
#!/bin/sed -nf
/SQL3227W Record token/{
N
P
D
}
答案 1 :(得分:0)
sed用于单个行上的简单替换,即全部。对于任何有趣的东西,只需使用awk:
awk '/SQL3227W Record token/{c=2} c&&c--' file
有关其他相关习语,请参阅Printing with sed or awk a line following a matching pattern。
答案 2 :(得分:-3)
这将打印所有匹配的行以及之后的下一行。
awk '/SQL3227W Record token/{nr[NR]; nr[NR+1]}; NR in nr' /log/PLAN_2015-08-16*.MSG >ERRORS.txt
我的文件是96GB,这可以很好地提取调试数据。