21:51 

О греп и регулярках

tom_redl
Shit happens
Пока я не знал о регулярных выражениях я приходил в ужас от того что приходилось писать кострукции типа
grep 192 logfile | grep -v 89 | grep office или
grep 168.115 log | grep 168.117
По счастью один умный человек сказал что я дурак.

Регулярные выражения (англ. regular expressions, жарг. регэкспы или регексы) — современная система поиска текстовых фрагментов в электронных документах, основанная на специальной системе записи образцов для поиска. (выдержка из википедии)
Собственно синтаксис регулярок несложен и есть в той же википедии.

Основные конструкции -
* Ноль или более
+ Одно или более
? Ноль или один раз
| Используется в качестве модификатора "или"
[] В квадртных скобках задаются символьные классы ( например [a-cf-h] будет означать все буквы от a до с и от f до h, с цифрами тоже самое.

Следующие символы позволяют спозиционировать регулярное выражение относительно элементов текста: начала и конца строки, границ слова.
$ Конец строки
\b Граница слова
\B Не граница слова

Этого набора вполне хватает для повседневных нужд.


Например поиск все адресов выданных бугалтерии
grep '168.10.1[17-25]' logfile
Или поиск всех менеджеров в логфайле сквида, которые смотрят порнуху.
grep '168.12.2[10-15].*\\bxuk.ru\\b' /var/log/squid/access.log ( \b - экранируется как символ границы слова, иначе греп воспримет его буквально)

Кстати, если очень хочется извращений, можно использовать однострочный перл скрипт
например:
perl -e 'while (<>) { if (/директор \w+ козел/) { print; }}' text выдаст все строки где между словом "директор" и "козел" будет еще одно слово.
наш директор большой козел - подходит
директор сказал менеджеру, что он козел - не подходит

   

Linux 4 All

главная