打印匹配行后的所有行

时间:2010-10-27 12:51:46

标签: unix sed awk

如何在第n行匹配模式后打印所有行,但忽略匹配行之前的所有行,包括匹配行,这是一个示例:

row1 something in this row
row2 something in this row
row3 something in this row
row4 don't need to match the whole line, something like java String.contains()
row5 something in this row
row6 something in this row
row7 something in this row
row8 something in this row
row9 something in this row
row10 something in this row

我正在寻找在该行中任何位置包含row4的行之后打印行,是否可以使用awk或sed或其他任何方式?

输出应为:

row5 something in this row
row6 something in this row
row7 something in this row
row8 something in this row
row9 something in this row
row10 something in this row

我见过类似的问题:

Awk - print next record following matched record

但我不确定如何调整它以满足我的需求。

6 个答案:

答案 0 :(得分:2)

试试这个:

sed '1,/row4/d' inputfile

答案 1 :(得分:1)

如果Perl很好,你可以这样做:

perl -ne 'print if($f); $f=1 if(/row4/)'

Code in Action

答案 2 :(得分:0)

您可以使用以下命令:

grep -A 5 "row4" test.txt

输出将是:

row4
row5
row6
row7
row8
row9

-A适用于After和类似的,您可以使用-B密钥,该密钥适用于之前。 5是要输出的行数。你当然可以选择任何你想要的东西。

答案 3 :(得分:0)

这很有效,大师可能会大大缩短它:

#!/usr/bin/perl
$pat = shift(@ARGV);
$p = 0;
while(<>) {
  if ($p == 1) { print $_;}
  if ($_ =~ /$pat/) {
    $p = 1;
  }
}

来自cmdline:

$ ./p.pl dat4 datafile

答案 4 :(得分:0)

awk -v pattern="row4" 'go {print} $0 ~ pattern {go = 1}' input_file

答案 5 :(得分:0)

 awk 'c&&c>0;/row4/{c=5}' file