Команда grep служит для поиска строк, содержащих заданный пользователем образец:
grep [-ключ ...] образец [файл ...]
Поиск строки кот
в стандартном вводе
$ grep кот
Программа выводит строки, содержащие образец, и выделяет его цветом. Отсюда и удвоение этих строк.
Поиск строки needle
в файле hystack.txt
$ grep needle haystack.txt
Поиск слова needle в файле hystack.txt
$ grep -w needle haystack.txt
grep без указания ключей ищет набор символов, а не слово. Например, будут отображены строки, включающие слово needless
и другие слова, в которых встречается набор символов needle
. Для поиска слова (то есть набора символов, ограниченного пробелами) используется ключ -w
.
Поиск имени function_name
в каталоге /home/www/dev/myprogram/
$ grep -w function_name /home/www/dev/myprogram/
В результатах поиска будет указан файл, в котором обнаружено совпадение. Ключ -n
добавит номер строки, в которой обнаружено совпадение, а ключ -r
позволит выполнить поиск во вложенных каталогах.
Поиск имени function_name
в каталоге /home/www/dev/myprogram/
и вложенных каталогах
$ grep -rnw function_name /home/www/dev/myprogram/
Имя файла будет указано перед каждым совпадением. Если нужно скрыть имена файлов, воспользуйтесь ключом -h
. Если, напротив, необходимы только имена файлов, укажите ключ -l
.
Поиск URL-адресов в файле internet.log
с помощью регулярных выражений
$ grep -wo http://.* internet.log
Ключ -o
указывает, что следует выводить лишь совпадение с шаблоном, а не всю строку.
Символ *
обычно интерпретируется оболочкой shell как условный знак, обозначающий произвольный символ или его отсутствие. Если же разыскивается сама "звездочку", то нужно предотвратить интерпретацию этого символа командной оболочкой или, как говорят, экранировать его. Для экранирования от интерпретации shell'ом, образец заключается в одинарные кавычки.
Поиск символа *
в файлах file1.txt, file2.txt, file3.txt
$ grep '*' file1.txt file2.txt file3.txt
Список символов, подлежащих экранированию: $, *, [ ], ^, |, ( ), \
Сколько строк файла /etc/group
содержат сочетание символов root
$ grep -c root /etc/group
Ключ -c
подсчитывает количество строк, в которых обнаружен образец.
Поиск строк файла /etc/printcap
, в которых не встречается сочетание print
$ grep -v print /etc/printcap
Ключ -v
задает вывод строк, в которых образец не встречается.
Анализ результаты работы других программ
С помощью grep
удобно анализировать результаты работы других программ. Для этого нужно вывод такой программы соединить каналом (|
) со вводом grep
. Допустим, через USB-порт подключен новый принтер, и нужно узнать, какие сообщения выдало в связи с этим ядро операционной системы. Сообщения ядра выводятся командой dmesg
. Соединим ее вывод каналом со вводом grep
и найдем в нем образец usb
без учета регистра символов:
$ dmesg | grep -i usb
Ключ -i
указывает grep
игнорировать регистр символов.
См. также +
Комментарии
comments powered by Disqus