Пять примеров использования grep
Утилита 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
19.06.09 | *NIX |
И как обычно рекомендуют, используйте
grep WORD вместо cat file | grep word