TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #187 7.68K
Прокачиваемся в grep

При работе в командной строке невозможно обойтись без grep - очень полезная утилита для работы с текстом.

Сегодня мы рассмотрим несколько популярных опций, которые позволяют выполнять более продвинутую выборку.

Найти точное соответствие

Для того чтобы искать соответствия только целым словам, используйте флаг "-w":


$ ls
'test script.sh' test test_1 test_2

$ ls | grep -w test
test script.sh
test


Аналогичного результата можно добиться через регулярное выражение:


$ ls | grep "\<test\>"
test script.sh
test


"\<" — начало слова.
"test" — искомый текст.
"\>" — конец слова.

Угловые скобки должны экранироваться, иначе они будут интерпретироваться как простые символы.

Игнорировать регистр

По умолчанию, grep чувствительна к регистру, что немного мешает поиску. Проблема решается путем добавления ключа "-i" к команде:


ls | grep -i new
newFile
NewFile


Вывод файлов с совпадениями

Используйте параметр "-l", чтобы вывести не сами строки, а только пути к файлам, в которых они содержатся:


$ grep -r -l "libnma" /usr/share
/usr/share/doc/libnma-gtk4-0/copyright


Параметр "-r" отвечает за рекурсивный поиск - grep прошерстит не только 1 уровень каталога, а пойдет вглубь.

Поиск по нескольким параметрам

Для того, чтобы передать команде несколько вводных данных для определения совпадений, используется флаг "-e" перед каждым объектом поиска:


$ ls | grep -i -e new -e old
NewFile
newFile
oldFile


Эту команду система понимает, как "или-или" и выводит все вхождения указанных слов.

Использование регулярных выражений

Настоящая сила grep проявляется, когда вы переходите от сопоставления простых строк к сопоставлению шаблонов - регулярных выражений.

Выражения бывают 2 типов: basic и extended. Одна из особенностей второго типа заключается в том, что некоторые символы требуют экранирования для сохранности фич: ?, +, {, |, (, ), <, >.

Но можно обойтись просто добавлением флага "-E":


$ ls | grep -E "script|test"


1. Квадратные скобки "[]" используются, чтобы провести проверку на соответствие одному из указанных символов:


$ ls | grep "test[23]"
test2
test3


Можем указать "-" для того, чтобы использовать диапазон значений:


$ ls | grep "test[1-3]"
test2
test3


2. Каретка "^" используется для поиска строк, которые начинаются с указанного шаблона. Давайте найдем совпадение всех строк, начинающихся с заглавной буквы:


$ grep "^[A-Z]" myfile
A lot of text
Hello world


3. Знак доллара "$" означает конец строки. В результат входят только те элементы, конец которых подходит под шаблон:


$ grep "world$" myfile
Hello world
hello world


4. Точка "." обозначает любой одиночный символ, кроме новой строки. Регулярное выражение "....." обозначает любую строку, содержащую минимум 5 символов:


$ grep '.....' myfile


5. Вертикальная черта "|" выполняет роль логического оператора "ИЛИ":


$ ls | grep "script\|test"
script
test


В общем, регулярные выражения прекрасны и многообразны. Детальнее ознакомиться с ними можете по ссылке.

Экранирование

Иногда выражения приводят к неожиданным результатам.

Предположим, вы хотите найти в файле "myfile" только те строки, которые заканчиваются на ".sh".

Следующая команда выдаст неверный результат, поскольку точка — это регулярное выражение, означающее «любой символ»:


$ grep ".sh" myfile
script_name.sh
script_namesh


Чтобы обойти эту проблему, требуется экранировать спецсимвол:


$ grep "\.sh" myfile
script_name.sh


Такое решение иногда становится громоздким. К счастью, можно заставить grep забыть о регулярных выражениях и искать буквально то, что мы указываем.

Для этого используется параметр (fixed) "-F":


$ grep -F ".sh" myfile
script_name.sh


LinuxCamp | #utils
  • 👍 62
  • 🔥 17
  • ❤ 9
  • ❤‍🔥 3
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →