2010-10-27 5 views
0

Как я могу напечатать все строки после согласования шаблона в п-е строки, но игнорировать все, прежде чем согласованный ряд, включая совпадающую строку, вот пример:печатать все строки следующих строк соответствуют

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 

Я ищу печатать строки, следующие за строкой, которая содержит строку4 в любой точке этой строки, возможно ли это с помощью 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

Но я не уверен, как адаптировать его под свои нужды.

ответ

0

Вам использовать следующую команду:

grep -A 5 "row4" test.txt 

Выход будет:

row4 
row5 
row6 
row7 
row8 
row9 

-A идет по После и Similary вы можете использовать -B ключ, который идет на перед. 5 - количество строк для вывода. Вы можете выбрать все, что захотите, конечно.

0

Это работает, гуру, вероятно, может сократить его значительно:

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

С ключами:

$ ./p.pl dat4 datafile 
0
awk -v pattern="row4" 'go {print} $0 ~ pattern {go = 1}' input_file 
2

Попробуйте это:

sed '1,/row4/d' inputfile 
Смежные вопросы