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

12 set 2022 2 min di lettura
Как исключить слова и шаблоны в Grep
Indice dei contenuti

Введение

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
 noviello:x:1000:1000:noviello:/home/noviello:/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. Путь к исключенному каталогу указан относительно каталога поиска.

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

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

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

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

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

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

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

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

Вывод

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.