вторник, 2 марта 2010 г.

grep и Perl

Пусть у нас в директории есть несколько html файлов со со страшными словами ILU, MILU, ILUT. Я хочу найти строки в этих файлах, куда входит именно ILU (ILUT и MILU не подходят) и вывести их на экран.

С помощью grep это выглядит так
grep -rnw 'ILU' ./*.html
Здесь -r выполняет рекурсивный поиск, -n ставит номера строк, куда входит ILU, а -w говорит, что мы ишщем слово целиком.

[удобно искать по исходникам: $ grep -rnw function_name /home/www/dev/myprogram/]

выдача будет состоять из строк вида
./results_add4.html:163:Solver is CG-Sq with ILU preconditioning

А можно написать скрипт на Perl, который делает то же самое (кроме простановки номеров строк):
#!/usr/bin/perl

#формируем список html-файлов в текущей директории
@FilesList = glob("*.html");

foreach $FileName (@FilesList)
{
open FN, $FileName;
#читаем файла построчно
while( <FN>)
{
#ищем вхождения слова ILU целиком, \b - граница слова
# $_ - очередная считанная строка
print "$FileName:$_\n" if m/\bILU\b/;
}

close FN;
}

Комментариев нет: