Шпаргалка по GNU grep

| Linux

GNU grep находит шаблоны в текстовых файлах и потоках.

Основы

grep [pattern] FILE

grep '^[A,E].*o' f.txt Найти строку, начинающуюся с A или E и заканчивающуюся на o
grep -f pat.txt f.txt Сканировать f.txt, используя содержимое pat.txt как регулярное выражение
grep -i Gnu f.txt Найти "gnu" в f.txt, игнорируя регистр букв.
grep -v gnu f.txt Найти все строки, не содержащие "gnu" (инвертировать соответствие)
grep -w 'a.*o' f.txt Искать только совпадения целого слова, игнорируя подстроки
grep -x 'a.*o' f.txt Искать только совпадения целой строки, как в ^(a.*o)$

Вывод

-c Вывести только количество строк, содержащих совпадение
--colo[u]r Отображение совпадений в цвете
-l Вывести имена файлов с совпадениями
-L Вывести имена найденных файлов, в которых не было совпадений
-o Печатать только совпадающую часть строки
-s Подавить ошибки (например, несуществующие или нечитаемые файлы)
-A n Вывести n количество строк после совпадающей строки
-B n Вывести n количество строк перед совпадающей строкой
-C n Вывести n количество строк до и после совпадающей строки

Выходные префиксы

-b Вывести байтовое смещение совпадения во входном файле
-H Вывести имя файла, содержащее совпадение
-h Не печатать имя файла, содержащее совпадение
-n Вывести номер строки каждого совпадения
-T Распечатать начальный Tab перед совпадениями, чтобы выходные данные были аккуратно выровнены

Выбор файла и каталога

-a Обработать двоичный файл, как если бы это был текст
-D <skip|read> Пропустить или прочитать FIFO, устройство или сокет
-d <skip|read|recurse> Пропуск, чтение или рекурсивный просмотр каталога
--exclude '*.sh' Не искать файлы с суффиксом .sh
--exclude-from FILE Пропустить любой файл, указанный в FILE
--exclude-dir *foo Пропустить любой каталог, заканчивающийся на foo
-r Когда обнаруживается каталог, искать в нём файлы.
-R Искать в каталогах и переходить по символическим ссылкам

Варианты

-G Использовать базовое регулярное выражение (по умолчанию)
-E Расширенное регулярное выражение
-F Интерпретировать шаблон поиска как фиксированную строку, а не как регулярное выражение
-P Использовать регулярное выражение Perl (PCRE)

Регулярное выражение

. Любой одиночный символ
? Соответствует предыдущему элементу ноль или один раз
* Соответствует предыдущему элементу ноль или более раз
+ Соответствует предыдущему элементу один или несколько раз
{2} Двойное сопоставление предыдущего элемента
{3,} Соответствует предыдущему элементу три или более раз
{,4} Соответствовать предыдущему элементу не более четырех раз
{1,5} Соответствовать предыдущему элементу хотя бы один раз, но не более пяти раз
[A,B] Соответствие A или B
[3-9] Соответствие всем цифрам от 3 до 9
^ Начало строки
$ Конец строки
\s Пробел
[:alnum:] Буквенно-цифровой символ
[:alpha:] Буквенный символ
[:digit:] Цифры от 0 до 9
[:punct:] Пунктуация
[:space:] Пробел