Date Редакция Категория comp Теги grep / linux

Команда grep служит для поиска строк, содержащих заданный пользователем образец:

grep [-ключ ...] образец [файл ...]

Поиск строки кот в стандартном вводе

$ grep кот

grep1.png

Программа выводит строки, содержащие образец, и выделяет его цветом. Отсюда и удвоение этих строк.

Поиск строки 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