Утилита 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— для поиска файлов и анализа их содержимого.
Оригиналы источников информации.
- gubin.systems «Команда grep.»
- youstable.com «Как использовать команду grep в Linux для эффективного поиска.»
- cloud.ru «Команда grep в Linux: как искать строки и шаблоны.»
- timeweb.cloud «Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux.»
- helpfulprofessor.com «Informational Texts Examples.»

