2013-09-11 4 views
1

Я пытаюсь найти и распечатать (ТОЛЬКО) разделы, содержащие некоторый идентификатор в данном файле. Секции разделяются с помощью начальных и конечных тегов и растягиваются на несколько строк. Задача должна выполняться командами unix.Печать регулярного выражения по нескольким строкам

Например, следующие строки:

start: 
    blah..blah 
    666 
    blah blah.. 
end: 
start: 
    blah..blah 
    1234 
    blah blah.. 
end: 
start: 
    blah..blah 
    8020 
    blah blah.. 
end:   

я хотел бы напечатать раздел, страты с «начала» и заканчивается «конец», скажем, для идентификатора 1234:

start: 
    blah..blah 
    1234 
    blah blah.. 
end: 

Ваша помощь приветствуется.

ответ

0

флип-флоп в :

perl -ne ' 
    if ($range = (m/\Astart:/ .. m/\Aend:/)) { 
     $s .= $_; 
     if ($range =~ /E0\Z/) { 
      if ($s =~ m/(?m)^\s*1234\s*$/) { 
       print $s; 
      } 
      undef $s; 
     } 
    } 
' infile 

Это дает:

start: 
    blah..blah 
    1234 
    blah blah.. 
end: 
1

Это может работать для вас (GNU СЭД):

sed '/^start:/!d;:a;/\nend:/!{$!{N;ba}};/1234/p;d' file 
Смежные вопросы