Утилита grep для поиска строк, соответствующих заданному шаблону.

Описание.

Команда grep (от англ. global regular expression print) используется для поиска строк, соответствующих заданному шаблону (в том числе регулярным выражениям), внутри одного или нескольких файлов. Результат выводится на экран, в файл или передаётся другой команде через пайп (|).

Синтаксис.

Синтаксис grep заключается в следующем:

grep [опции] "шаблон" file.txt [file...]

или

$ команда | grep [опции] "шаблон"

где:

  • options — Флаги или параметры, которые изменяют поведение grep команды (например, чувствительность к регистру, номера строк и так далее).
  • pattern — Поисковый термин или регулярное выражение, которое вы хотите найти.
  • file — Файл или файлы, в которых вы хотите выполнить поиск.

Основные опции.

Опции можно комбинировать с друг другом.

  • -i — игнорировать регистр.
  • -r, --recursive рекурсивный поиск в подкаталогах.
  • -n — показывать номера строк.
  • -l — выводить только имена файлов с совпадениями.
  • -v — инвертировать результат (вывести строки, которые не совпадают).
  • -c — подсчитать количество совпадающих строк.
  • -h — не показывать имя файла перед совпадением.
  • -s — тихий режим (ничего не выводит, только код возврата).
  • -E — использовать расширенные регулярные выражения.
  • -F — искать точное совпадение как фиксированную строку (не использовать регулярные выражения).

Пример текста.

$ mcedit ~/test/somefile.txt
Real-Life News Article Example:
Let’s take The New York Times as an example.
They produce news articles on a wide array of topics, from international events to local incidents. 
An example could be a report on the recent United Nations Climate Change Conference. 
The article would delve into the key points of the conference, list the participating countries, detail the agreements made, and provide interpretations from various experts.
These reports allow readers to stay informed about global events and developments.
EXAMPLE text for bash script.
$ mcedit ~/test/otherfile.txt
Real-Life Dictionary Example:
If we take the Oxford English Dictionary as an example, it is one of the most well-known and respected dictionaries worldwide.
Its latest edition houses definitions for over 600,000 words, providing not just their meanings, but their pronunciation guides and etymology as well. 
The Oxford English Dictionary is a vital resource for linguists, writers, researchers, and anyone interested in the nuances of the English language.
EXAMPLE text for bash script.
mcedit ~/test/emailfile.txt
Пример корректного email: user@example.com
Еще один пример: john.doe123@sub.domain.org
Некорректный email: user@.com
Еще один некорректный пример: @example.com
Корректный email с точками и дефисами: user.name+alias@sub-domain.example.com
Email с верхним регистром: USER@DOMAIN.COM
Некорректный email без домена: user@com
Еще один корректный пример: email@123.123.123.123
Некорректный email с пробелом: user @example.com
Еще один некорректный пример: user@domain..com
Корректный email: user.name@example.co.uk
Некорректный email: user@domain.c
Корректный email: user+alias@domain.com
Некорректный email: user@domain.-com

Примеры использования.

1. Найдёт и выведет все строки в файле somefile.txt, содержащие слово example.

$ grep "example" ~/test/somefile.txt

Ответ:

2. Подсветить совпадения цветом -color[=КОГДА].

  • --colour[=КОГДА] — использовать маркеры для различия совпадающих строк; КОГДА может быть «always» (всегда), «never» (никогда) или «auto» (автоматически)

Например:

$ grep --color=never "example" ~/test/somefile.txt

Ответ: (текст без цветных букв в выведенном тексте)

3. Ищет example во всех *.txt файлах в определенном месте.

$ grep "example" ~/test/*.txt

Ответ:

4. Вывести только имена файлов с совпадениями по example.

$ grep -l "example" ~/test/*.txt

Ответ:

5. Найдет слово example как отдельное слово.

$ grep -w "example" ~/test/somefile.txt

Ответ:

6. Выведет строки, где есть совпадение и United, и Conference.

$ grep "United.*Conference" ~/test/somefile.txt
$ grep "begin.*end" ~/test/somefile.txt

Ответ:

7. Показать только совпавшую часть строки.

$ grep -o "United.*Conference" ~/test/somefile.txt
$ grep -o "begin.*end" ~/test/somefile.txt

Ответ:

8. Показать строки, полностью совпадающие с шаблоном.

Поищем без оригинальной точки в конце предложения.

$ grep -x "EXAMPLE text for bash script" ~/test/somefile.txt

Поищем с оригинальной точкой в конце предложения.

$ grep -x "EXAMPLE text for bash script." ~/test/somefile.txt

Ответ: (как видно, без точки он ничего не нашел, нет точного совпадения строки)

9. Выведет строки, содержащие New York и Oxford.

$ grep -e "New York" -e "Oxford" ~/test/*.txt

Ответ:

10. Ищет строку example в файле somefile.txt, игнорируя регистр. Ищет example, Example, EXAMPLE и так далее, по аналогии.

$ grep -i "example" ~/test/somefile.txt

Ответ:

11. Ключ -m2 ограничивает вывод example только 2 совпадениями.

 $ grep -m2 "example" ~/test/somefile.txt

Ответ:

12. Показать 2 строки до и после совпадения.

$ grep -A2 -B2 "United Nations Climate Change Conference" ~/test/somefile.txt

Ответ:

13. Показать 2 строки контекста вокруг совпадения.

$ grep -C2 "600,000" ~/test/otherfile.txt

Ответ:

14. Посчитает количество совпадений, сколько раз встречается слово example в файле, то есть количество строк со словом example в файле somefile.txt.

$ grep -c "example" ~/test/somefile.txt

Ответ:

Можно комбинировать с игнорированием регистра -i.

$ grep -c -i "example" ~/test/somefile.txt

Ответ:

15. Рекурсивный поиск в указанном каталоге. Ищет example рекурсивно, во всех файлах указанного каталога ~ и его подкаталогов.

$ grep -r "example" ~/test/
$ grep -r -i "example" ~/test/

Ответ:

16. Показывает только совпадающие строки example, без контекста. Выведет только совпадающие строки с example, без указания имён файлов.

$ grep -h "example" ~/test/*.txt

Ответ:

17. Показывает номера строк вместе с совпадениями. Покажет строку и её номер в файле.

$ grep -n "example" ~/test/somefile.txt
$ grep -n -i "example" ~/test/*.txt

Ответ:

18. Инвертировать результат, то есть вывести строки, НЕ содержащие шаблон.

Выведет все строки, где нет слова example. Учет регистров тоже работает.

$ grep -v "example" ~/test/somefile.txt
$ grep -v -i "example" ~/test/somefile.txt

Ответ:


19. Выведет строки, не содержащие «New York» и «Oxford«.

$ grep -v -e "New York" -e "Oxford" ~/test/*.txt

Ответ:

20. Искать строки, начинающиеся с example или «Real-Life«.

$ grep "^example" ~/test/*.txt
$ grep "^Real-Life" ~/test/*.txt

Ответ:

21. Найти строки, оканчивающиеся на «:» двоеточие или на определенное выражение.

$ grep ":$" ~/test/somefile.txt

Ответ:

22. Показывает строки, содержащие цифры 1, 2, 3, 4, 5, 6, 7, 8, 9, 0.

$ grep "[0-9]" ~/test/otherfile.txt

Ответ:

23. Найти строку argument в бинарном файле /usr/bin/find.

$ grep -a "argument" /usr/bin/find

Ответ:

Примеры с регулярными выражениями.

Ключ -E включает поддержку расширенных регулярных выражений.

1. Найдёт строки, начинающиеся с определённого слова EXAMPLE.

$ grep -E "^EXAMPLE" ~/test/*.txt

Ответ:

2. Найти строки, оканчивающиеся на «:» двоеточие или на определенное выражение.

$ grep -E ":$" ~/test/*.txt

Ответ:

3. Найти строки с цифрами 1, 2, 3, 4, 5, 6, 7, 8, 9, 0:

$ grep -E "[0-9]" ~/test/*.txt

Ответ:

4. Найти строки с email-адресами:

$ grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" ~/test/emailfile.txt

Ответ:

5. Найти выражения New York или Oxford.

$ grep -E "New York|Oxford" ~/test/*.txt

Ответ:

6. Найти строки, которые начинаются с больших букв английского алфавита.

$ grep -E "^[a-zA-Z]" ~/test/*.txt

Ответ:

Полезные заметки.

1. Команды утилите grep чувствительны к регистру по умолчанию.

2. Используйте --color=auto для цветовой подсветки совпадений example:

$ grep --color=auto "example" ~/test/*.txt

Ответ:

3. Для работы с большими файлами можно комбинировать с less:

$ grep "example" ~/test/somefile.txt | less

Ответ: (крутим вверх-вниз и смотри результаты выборки)

Пример работы скрипта.

Создадим тестовый файл тест.txt:

$ echo -e "Это тестовая строка\nОшибка найдена\nТест прошёл успешно" > тест.txt

Найдём строки со словом ошибка:

$ grep -i "ошибка" тест.txt

Ответ:

Возвращаемые значения.

Это полезно при использовании grep в скриптах и проверке условий.

0 — найдено хотя бы одно совпадение.
1 — совпадений нет.
2 — ошибка выполнения.

Альтернативы и дополнения.

  • egrep — то же, что grep -E — работает с расширенными регулярными выражениями.
  • fgrep — быстрый поиск фиксированных строк (эквивалент grep -F).
  • rg (ripgrep) — современная альтернатива с высокой скоростью поиска.
  • awk / sed — для сложной обработки текста.
  • find + grep — для поиска файлов и анализа их содержимого.

Оригиналы источников информации.

  1. gubin.systems «Команда grep.»
  2. youstable.com «Как использовать команду grep в Linux для эффективного поиска.»
  3. cloud.ru «Команда grep в Linux: как искать строки и шаблоны.»
  4. timeweb.cloud «Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux.»
  5. helpfulprofessor.com «Informational Texts Examples.»