маленькая задачка
Feb. 28th, 2011 06:21 pmНеобходимо прочитать 30-Мб файл в переменную и сделать в переменной мультистрочный поиск...
хочу поймать такие строки:
!КОМАНДА
текст текст текст текст текст текст текст текст текст текст текст текст
Т.е. если строка начинается на "!", то нужно печатать все до тех пор, пока не будет полностью пустая строка (^\s*$).
мое решение:
perl -0000 -lne 'm#^(!.+)#sm && print $1'
т.е. читаем по-параграфно, находим
^! и выбираем от него и до конца.ps. есть возможность споткнуться о "пустую строку", где буд(е|у)т пробел(ы).
pps.
# ll -h /var/log/messages-20110213
-rw-------. 1 root root 190M Feb 13 03:12 /var/log/messages-20110213
# perl -lne 'print; print "\n" if (int(rand 100)%5 == 0); ' /var/log/messages-20110213 >| /tmp/test
# ll -h /tmp/test
-rw-r--r--. 1 ocehb wheel 190M Feb 28 16:15 /tmp/test
# time perl -0000 -lne 'm#^(!.+)#sm && print $1' /tmp/test
Real: 1.14s User: 0.18s System: 0.91s Percent: 95%% Cmd: perl -0000 -lne 'm#^(!.+)#sm && print $1' /tmp/test
#