2013-07-11 2 views
-1

У меня есть папка с несколькими TXT-файлами. Я хочу проверить несколько строк в этих текстовых файлах и предоставить результат как out.txt с 5 строками выше и 5 строками ниже строки.Perl Script: поиск строки из папки с несколькими файлами

+4

использовать grep с опцией '-C 5' – perreal

+0

как хотите. Perl: [ack] (http://beyondgrep.com/) – salva

+0

Добро пожаловать в SO. Здесь возьмите [тур] (http://stackoverflow.com/about). –

ответ

0

, если вы настаиваете на PERL Oneliner;

perl -n -e 'if (/searchStringHere/) {print "\n\n\n\n\n$_\n\n\n\n\n"}' *.txt 

Если решение Grep работает для вас, я считаю, что это более элегантно ...

обновление

это просто поразило меня, что вы могли бы быть пользователем окна, так что вы не Grep ...

этот код не был протестирован, так как я не установлен Perl на этой машине, но это должно работать: # yourperl/Perl

! 10
$flag, $l1, $l2, $l3, $l4, $l5, $l6; 
$cnt = 5; 
$file = shift; 
open("$file") || die "can't open $file\n"; 
while (<>) { 
$l1 = $l2; # starting with reserving the lines for back print 
$l2 = $l3; 
$l4 = $l5; 
$l5 = $l6; 
$l6 = $_; 
if (/your string here/) { 
    $cnt = 5; 
    print ($l1$l2$l3$l4$l5$l6);# print line + 5 prev lines 
    next 
} 
if ($cnt >0) { # print the next 5 lines 
    print $l6; 
    $cnt--; 
} 
} 
+0

Обратите внимание: что если вы собираетесь снова и снова находить, вам нужен только один набор из \ n \ n \ n \ n \ n - другой будет сгенерирован следующим результатом поиска. если вы оставите его как есть, у вас будет 10 строк между двумя результатами в середине вашего списка поиска. – user2141046

+0

Как я понимаю, OP хочет контекст вокруг ключевого слова для поиска. Не пустые строки. – Birei

+0

о, поэтому я неправильно понял, что он имел в виду. в этом случае grep -C отлично справляется – user2141046

2

Это легче сделать с Grep:

grep -A 5 -B 5 'searchstring' *.txt > a.out 

С Perl :-)

use strict;use warnings; 
`grep -A 5 -B 5 'searchstring' *.txt > a.out`; 
die "Something went wrong: $!" if $?; 
Смежные вопросы