如何在第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 – 打印匹配logging后的下一条logging
但是我不确定如何去适应我的需求。
如果Perl可以,你可以这样做:
perl -ne 'print if($f); $f=1 if(/row4/)'
行动中的代码
尝试这个:
sed '1,/row4/d' inputfile
你使用下面的命令:
grep -A 5 "row4" test.txt
输出将是:
row4 row5 row6 row7 row8 row9
-A
去之后,相似的,你可以使用之前的-B
键。 5
是要输出的行数。 你当然可以选择任何你想要的。
这是有效的,上师可能会大大缩短:
#!/usr/bin/perl $pat = shift(@ARGV); $p = 0; while(<>) { if ($p == 1) { print $_;} if ($_ =~ /$pat/) { $p = 1; } }
从cmdline:
$ ./p.pl dat4 datafile
awk 'c&&c>0;/row4/{c=5}' file
awk -v pattern="row4" 'go {print} $0 ~ pattern {go = 1}' input_file