Как исключить слово с помощью grep
Инструмент командной строки grep чрезвычайно полезен для поиска в текстовых данных строк и фрагментов, которые соответствуют определенной строке, символу, слову или регулярному выражению. Хотя в большинстве случаев grep используется для сортировки данных на предмет совпадений синтаксиса, что, если вы хотите исключить слово или строку с помощью grep вместо? Исключение совпадений строк с помощью grep не менее полезно, чем поиск и печать совпадений в grep, поэтому давайте рассмотрим, как исключить совпадения строк и исключить слова с помощью grep.
Очевидно, вам понадобится опыт работы с командной строкой и знакомство с grep, чтобы это оказалось полезным. Если вы хотите продолжить, вы можете открыть приложение «Терминал» и попробовать его самостоятельно. Поскольку grep не зависит от ОС, вы можете использовать трюк исключения в Mac OS, Linux, unix или в любом другом месте, где используется grep.
Как исключить отдельное слово с помощью grep
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Самый простой способ исключить строки со строкой или совпадением синтаксиса — использовать grep и флаг -v.
Например, предположим, что мы используем cat для печати файла в командной строке, но мы хотим исключить все строки, содержащие термин «ThisWord», тогда синтаксис будет выглядеть следующим образом:
cat example.txt | grep -v «ThisWord»
Результатом будет текстовый файл example.txt, но исключая любую строку, которая содержит строку, совпадающую с «ThisWord».
Вы также можете использовать grep непосредственно для файлов и исключить совпадения строк на основе слов или синтаксиса, например:
grep -v «ThisWord» example.txt
Используйте то, что лучше всего подходит для вашего конкретного рабочего процесса.
Как исключить несколько строк или слов с помощью grep
Теперь, когда вы знаете, как исключить совпадения для одного слова, следующий очевидный вопрос касается исключения нескольких слов с помощью grep. Это так же просто, и есть несколько способов сделать это, используя флаг -v, а также флаг -e.
Сначала давайте возьмем приведенный выше пример использования cat в файле, переданном в grep, и исключим любые строки, соответствующие двум словам; «Word1» и «Word2» это будет выглядеть следующим образом:
cat example.txt | grep -v -e «Word1» -e «Word2»
Любые строки, содержащие «Word1» или «Word2», будут исключены из распечатанных результатов.
Вы также можете использовать grep непосредственно для файлов, как и раньше:
grep -v -e «Word1» -e «Word2» example.txt
Другой подход — отделить то, что нужно исключить, с помощью grep, используя канал для разделения каждого совпадения, например:
grep -Ev «word1|word2» example.txt
Если вы протестируете любую из этих опций на примере текстового файла, вы обнаружите, что вывод идентичен независимо от выбранного вами подхода, каждая из которых исключает строки, содержащие целевые фразы, синтаксис, слова или текстовое соответствие.
Отлично, покажите мне полезный пример исключения данных с помощью grep!
В качестве практического примера, который могут оказаться полезными опытные пользователи Mac, мы можем использовать исключение grep при печати и запросе истории командной строки, чтобы найти ранее выполненные команды, чтобы найти совпадения по умолчанию, но исключив некоторые выбранные строки по умолчанию из вывода.
В приведенном здесь примере мы напечатаем историю команд для совпадений строк по умолчанию, но исключим все совпадения, имеющие отношение к iTunes, как определено в com.apple.itunes:
history |grep «defaults write» |grep -v -e «com.apple.itunes»
Так что, если вы следовали, это будет сообщать обо всех исторических выполнениях команды «defaults write», за исключением всего, что относится к приложению iTunes. Красиво, да?
Если у вас есть какие-то особенно удобные способы исключения совпадений с помощью grep, поделитесь ими с нами в комментариях ниже! И если вам понравилась эта статья, вы почти наверняка захотите просмотреть наши многочисленные статьи о командной строке здесь, где есть еще много чего узнать!
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Как исключить в Grep
Добавить в избранное
g rep — это мощный инструмент командной строки, который используется для поиска в одном или нескольких входных файлах строк, соответствующих регулярному выражению, и записывает каждую совпадающую строку в стандартный вывод.
В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью 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 andreyex:x:1000:1000:andreyex:/home/andreyex:/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через конвейер, и только строки, соответствующие заданному шаблону, будут напечатаны на терминале.
Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются от имени пользователя «root», вы можете отфильтровать вывод команды ps:
Исключить каталоги и файлы
Иногда при выполнении рекурсивного поиска с опциями -r или -R вы можете захотеть исключить определенные каталоги из результатов поиска.
Основное различие между параметрами -r или -R заключается в том, что когда grep вызывается с прописными буквами, Rон будет следовать всем символическим ссылкам.
Чтобы исключить каталог из поиска, воспользуйтесь опцией —exclude-dir. Путь к исключенному каталогу относительно каталога поиска.
Вот пример, показывающий, как искать строку andreyex во всех файлах внутри /etc, за исключением каталога /etc/pki:
grep -R --exclude-dir=pki andreyex /etc
Чтобы исключить несколько каталогов, заключите исключенные каталоги в фигурные скобки и разделите их запятыми без пробелов.
Например, чтобы найти файлы , которые содержат строку «gnu» в вашей системе Linux исключая proc, bootи sysкаталоги , которые вы бы запустить:
При использовании сопоставления с подстановочными знаками вы можете исключить файлы, базовое имя которых совпадает с GLOB, указанным в опции —exclude.
В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за исключением файлов andreyex, оканчивающихся на .pngи .jpg:
Заключение
Команда grepпозволяет исключить шаблоны и каталоги при поиске файлов.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.