Sed线匹配下面的线

时间:2015-08-17 14:49:18

标签: unix awk sed

我可以找到这种模式的线条,但在某些情况下,信息在比赛后的线上。我怎样才能在我的比赛线后面得到这条线?

sed -n '/SQL3227W  Record token/p' /log/PLAN_2015-08-16*.MSG >ERRORS.txt

3 个答案:

答案 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,这可以很好地提取调试数据。