Как исключить в Grep | Linux

Как исключить в Grep | Linux

https://t.me/sysadminof

grep - это мощный инструмент командной строки, который используется для поиска в одном или нескольких входных файлах строк, соответствующих регулярному выражению, и записывает каждую совпадающую строку в стандартный вывод.

В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью grep.

Исключить слова и шаблоны

Чтобы отображать только те строки, которые не соответствуют поисковому шаблону, используйте параметр -v(или --invert-match).

Например, чтобы напечатать строки, которые не содержат строку, nologinвы должны использовать:

grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

-wОпция говорит grepвернуть только те строки , где указанная строка представляет собой целое слово (заключенные символы без слов).

По умолчанию учитывается grepрегистр. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные. Чтобы игнорировать регистр при поиске, вызовите grepс -iопцией.

Если строка поиска содержит пробелы, вам необходимо заключить ее в одинарные или двойные кавычки.

Чтобы указать два или более шаблонов поиска, используйте -eопцию:

grep -wv -e nologin -e bash /etc/passwd

Вы можете использовать эту -eопцию сколько угодно раз.


Другой вариант исключения нескольких шаблонов поиска - объединение шаблонов с помощью оператора ИЛИ |.

В следующем примере печатаются строки, не содержащие строк nologinили bash:

grep -wv 'nologin\|bash' /etc/passwd

GNU grepподдерживает три синтаксиса регулярных выражений: базовый, расширенный и совместимый с Perl. По умолчанию grepинтерпретирует шаблон как базовое регулярное выражение, в котором метасимволы, например, |теряют свое особое значение, и вы должны использовать их версии с обратной косой чертой.

Если вы используете опцию расширенного регулярного выражения -E, то оператор |не следует экранировать, как показано ниже:

grep -Ewv 'nologin|bash' /etc/passwd

Вы можете указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. В следующем примере gamesисключаются строки, в которых строка находится в самом начале строки:

grep -v "^games" file.txt

Вывод команды может быть отфильтрован grepчерез конвейер, и только строки, соответствующие заданному шаблону, будут напечатаны на терминале.

Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются от имени пользователя «root», вы можете отфильтровать вывод ps команды:

ps -ef | grep -wv root

Исключить каталоги и файлы

Иногда при выполнении рекурсивного поиска с опциями -rили -Rвы можете захотеть исключить определенные каталоги из результатов поиска.

Основное различие между параметрами -rили -Rзаключается в том, что когда grep вызывается с прописными буквами, Rон будет следовать всем символическим ссылкам.

Чтобы исключить каталог из поиска, воспользуйтесь --exclude-dirопцией. Путь к исключенному каталогу относительно каталога поиска.

 

Вот пример, показывающий, как искать строку linuxizeво всех файлах внутри /etc, за исключением /etc/pkiкаталога:

grep -R --exclude-dir=pki linuxize /etc

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

Например, чтобы найти файлы , которые содержат строку «Гну» в вашей системе Linux исключая procbootи sysкаталоги , которые вы бы запустить:

grep -r --exclude-dir={proc,boot,sys} gnu /

При использовании сопоставления с подстановочными знаками вы можете исключить файлы, базовое имя которых совпадает с GLOB, указанным в --excludeопции.

В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за linuxizeисключением файлов, оканчивающихся на .pngи .jpg:

grep -rl --exclude=*.{png,jpg} linuxize *

Заключение

Команда grepпозволяет исключить шаблоны и каталоги при поиске файлов.



Report Page