Утилита grep является одной из самых важных при построении блоков
фильтрации текста в shell. В этой статье мы покажем пять простых
примеров ее использования, которые позволят вам по достоинству оценить
ее возможности
Команда grep
- это очень мощное средство для поиска и фильтрации текстовой информации. grep
может работать как с стандартным потоком ввода, так и с информацией в файлах. Несмотря на кажущуюся простоту, grep
мог бы занять первое место среди подобных утилит. Давайте рассмотрим несколько реальных примеров ее использования
Основная сфера применения grep
- поиск слов или фраз в
файлах и потоках вывода. Вы можете осуществить поиск, набрав в
командной строке запрос и область поиска (файл). Например, чтобы найти
строку “needle” в файле hystack.txt используйте следующую команду:
$ grep needle haystack.txt
В результате grep отобразит все вхождения needle, которые он
встретит в содержимом файла haystack.txt. Важно заметить, что в этом
случае grep
ищет именно набор символов, а не слово.
Например, будут отображены строки, включающие слово “needless” и другие
слова, в которых встречается последовательность “needle”. Чтобы указать
grep
, что вы ищете именно слово, используйте ключ -w
.
Этот ключ ограничит область поиска только указанным словом. Под словом
подразумевается запрос, ограниченный с обоих сторон любыми пробельными
символами, знаками пунктуации или переносами строки.
$ grep -w needle haystack.txt
Не обязательно ограничивать область поиска только одним файлом, grep
может выполнять поиск и по группе файлов, причем в результатах поиска будет указан файл, в котором обнаружено совпадение. Ключ -n
добавит еще и номер строки, в которой обнаружено совпадение, а ключ -r
позволит выполнить рекурсивный поиск. Это очень удобно при поиске среди файлов с исходными текстами программ.
$ grep -rnw function_name /home/www/dev/myprogram/
Имя файла будет указано перед каждым совпадением. Если вам необходимо скрыть имена файлов, воспользуйтесь ключом -h
, напротив, если необходимы только имена файлов, то укажите ключ -l
Реальная мощь grep
заключается в возможности
использовать регулярные выражения. Вы можете искать текст, описав
область поиска с помощью регулярного выражения (описания синтаксиса
регулярных выражений выходит за рамки статьи, руководства по ним в
большом количестве доступны в Сети). В следующем примере мы выполним
поиск URL-адресов в лог-файле IRC и покажем последние 10 совпадений.
$ grep -wo http://.* channel.log | tail
Параметр -o
указывает grep
, что следует выводить лишь сопадение с шаблоном, а не всю строку. Вывод grep
мы при помощи pipe перенаправляем команде tail
, которая по умолчанию выводит 10 последних строк.
Теперь мы подсчитаем количество сообщений, посланных в irc-канал
определенными пользователями.. Например, все сообщения, которые я
послал из дома и с работы. Они отличаются по никнейму, дома я использую
ник boombick_at_home
, а на работе boombick_at_work
$ grep -c “^<boombick_at_\(home\|work\)>” channel.log
С параметром -c
grep
выводит лишь
количество найденных совпадений, а не сами совпадения. Строка поиска
заключена в кавычки потому, что в ней содержатся специальные символы,
которые могут распознаны оболочкой как управляющие. Обратите внимание,
что кавычки не входят в шаблон поиска.
Ну и напоследок давайте выполним поиск по сообщениям людей, которые
любят “кричать” в канале. Под “криком” мы понимаем сообщения,
написанные в blondy-style, одними ЗАГЛАВНЫМИ буквами. Чтобы исключить
из поиска случайные попадания аббревиатур, будем искать слова из пяти и
более символов
$ grep -w “[A-Z]\+\{5,\}” channel.log
Ну вот и все, я надеюсь, что эта статья поможет вам оценить мощь grep
и ее удобство в каждодневном использовании. Ну а за более детальным описанием вы можете обратиться к странице руководства man grep
Have a nice day
Источник: http://boombick.org/blog/posts/74