- рекурсивный grep: исключить определенные каталоги
- рекурсивный grep: исключить определенные каталоги
- 6 ответов 6
- Как я могу исключить каталоги из grep -R?
- Как я могу исключить каталоги с помощью команды grep -R
- Предпосылки:
- Пример 01:
- Пример 02:
- Пример 03:
- Заключение:
- Как исключить в Grep
- Исключить слова и шаблоны
- Исключить каталоги и файлы
- Заключение
рекурсивный grep: исключить определенные каталоги
Я часто использую рекурсивный grep для поиска исходных файлов с конкретным контентом.
На больших кодовых базах это может быть медленным, поэтому я использую —incldue для ограничения расширений / белых списков.
Тем не менее, было бы более эффективно исключить (удалить) целые подкаталоги, я думаю:
Но —exclude поддерживает только шаблоны файлов, такие как * .java выше. Как я могу исключить каталоги?
Вы можете посмотреть в АСК .
Я только начал использовать это, но это кажется подходящим для этого.
вы можете использовать вместо поиска:
Итак, это немного задом наперед, сначала вы получите результаты grep, а затем путь. Может быть, у кого-то еще есть лучший ответ?
Вот полный пример скрипта в одном из моих проектов, который может помочь, я называю этот файл «all_source» (помеченный как исполняемый файл) и помещаю его в корневой каталог моего проекта, затем называю его grep myfunc $(./all_source) сортировкой в конце скрипта полностью по желанию.
Этот скрипт возвращает все имена файлов в проекте, которые совпадают *.h, *.cpp, *.c, *.lua, *.*awk , но не выполняет поиск во всех папках с именами .svn и gen, а также пропускает папки ./lib и ./vc6 (но только те, которые находятся прямо в корне проекта). Поэтому, когда вы делаете grep myfunc $(./all_source) это только greps в этих файлах. Вам также нужно будет вызвать это из корневого каталога проекта.
Источник
рекурсивный grep: исключить определенные каталоги
Я часто использую рекурсивный grep для поиска исходных файлов с конкретным контентом.
На больших кодовых базах это может быть медленным, поэтому я использую —incldue для ограничения расширений / белых списков.
Однако было бы эффективнее исключить (удалить) целые подкаталоги, я думаю:
Но —exclude поддерживает только шаблоны файлов, такие как * .java выше. Как я могу исключить каталоги?
6 ответов 6
Вы можете посмотреть в АСК.
Я только начал использовать это, но это кажется хорошо подходящим для этого.
вы можете использовать вместо поиска:
Итак, это немного задом наперед, сначала вы получите результаты grep, а затем путь. Может быть, у кого-то еще есть лучший ответ?
Вот полный пример скрипта в одном из моих проектов, который может помочь. Я называю этот файл «all_source» (помеченный как исполняемый файл) и помещаю его в корневой каталог моего проекта, затем называю его grep myfunc $(./all_source) как в конце сценария совершенно необязательно.
Этот скрипт возвращает все имена файлов в проекте, которые соответствуют *.h, *.cpp, *.c, *.lua, *.*awk , но не выполняет поиск во всех папках с именами .svn и gen, а также в папках. пропуская папки для ./lib и ./vc6 (но только те, которые находятся прямо в корне проекта). Таким образом, когда вы делаете grep myfunc $(./all_source) он только grep в этих файлах. Вам также нужно будет вызвать это из корневого каталога проекта.
Существует также опция -prune, чтобы найти:
Источник
Как я могу исключить каталоги из grep -R?
Я хочу пройти через все подкаталоги, кроме каталога «node_modules».
РЕШЕНИЕ 1 (объединить find и grep )
Цель этого решения не в том, чтобы иметь дело с grep производительностью, а в том, чтобы продемонстрировать переносимое решение: оно также должно работать с занятой версией или GNU версии старше 2.5.
Используйте find , для исключения каталогов foo и bar:
Затем совместим find и нерекурсивное использование grep , в качестве переносимого решения:
РЕШЕНИЕ 2 (рекурсивное использование grep ):
Вы уже знаете это решение, но я добавляю его, так как это самое последнее и эффективное решение. Обратите внимание, что это менее портативное решение, но более удобочитаемое.
Чтобы исключить несколько каталогов, используйте —exclude-dir как:
РЕШЕНИЕ 3 (Ag)
Если вы часто просматриваете код, Ag (The Silver Searcher) — гораздо более быстрая альтернатива grep, настроенная для поиска кода. Например, он автоматически игнорирует файлы и каталоги, перечисленные в .gitignore , так что вам не нужно постоянно передавать те же громоздкие опции исключения для grep или find .
Последние версии GNU Grep (> = 2.5.2 ) предоставляют:
который исключает каталоги, соответствующие шаблону, dir из рекурсивных поисков по каталогам.
Так что вы можете сделать:
Для получения дополнительной информации о синтаксисе и использовании см.
Для более старых GNU Greps и POSIX Grep используйте, find как предлагается в других ответах.
Или просто используйте ack ( Edit : или The Silver Searcher ) и покончите с этим!
Если вы хотите исключить несколько каталогов :
«r» для рекурсии, «l» для печати только имен файлов, содержащих совпадения, и «i» для игнорирования различий в регистре:
Пример: я хочу найти файлы, содержащие слово «привет». Я хочу искать во всех моих каталогах linux, кроме каталога proc , загрузочного каталога, каталога sys и корневого каталога:
Примечание: приведенный выше пример должен быть root
Примечание 2 (согласно @skplunkerin): не ставьте пробелы после запятых в
расширяется с помощью оболочки (например, Bash), а не с помощью grep этого:
Заключение в кавычки предотвратит расширение оболочки, поэтому это не сработает:
Используемые шаблоны —exclude-dir — это шаблоны того же типа, которые описаны на странице руководства для —exclude опции:
Оболочка, как правило, сама пытается развернуть такой шаблон, поэтому, чтобы избежать этого, вы должны заключить его в кавычки:
Вы можете использовать фигурные скобки и шаблоны исключений в кавычках вместе, как это:
Шаблон может охватывать несколько сегментов пути:
Это исключило бы каталог как topdir/something/else .
Часто используйте это:
grep может использоваться вместе с -r (рекурсивным), i (игнорировать регистр) и -o (печатает только совпадающую часть строк). Чтобы исключить files использование —exclude и исключить использование каталогов —exclude-dir .
Собрав все вместе, вы получите что-то вроде:
Описание этого звучит намного сложнее, чем есть на самом деле. Проще проиллюстрировать на простом примере.
Пример:
Предположим, я ищу текущий проект для всех мест, где я явно установил строковое значение debugger во время сеанса отладки, и теперь хочу просмотреть / удалить.
Я пишу сценарий с именем findDebugger.sh и использую, grep чтобы найти все вхождения. Однако:
Для файловых исключений — я хочу убедиться, что .eslintrc это игнорируется (на самом деле это правило linting, debugger поэтому его следует исключить). Кроме того, я не хочу, чтобы мой собственный сценарий упоминался в каких-либо результатах.
Для исключений из каталогов — я хочу исключить, так node_modules как он содержит много библиотек, на которые есть ссылки, debugger и меня не интересуют эти результаты. Кроме того, я просто хочу опустить .idea и .git скрытые каталоги, потому что меня не волнуют эти места поиска, и я хочу сохранить результативность поиска.
Источник
Как я могу исключить каталоги с помощью команды grep -R
Главное меню » Ubuntu » Как я могу исключить каталоги с помощью команды grep -R
Предпосылки:
Дайте понять, что у вас установлен и настроен любой дистрибутив Linux. Мы используем систему Ubuntu 20.04 для реализации в этой статье. С другой стороны, у вас также должны быть права пользователя root. Откройте командный терминал, чтобы начать работу.
Пример 01:
Когда вы открываете командный терминал, вы находитесь в домашнем каталоге системы Ubuntu 20.04. Давайте перейдем в каталог документов. Для этого вы должны использовать указанную ниже команду cd в командной оболочке вместе с путем к каталогу.
Теперь вы находитесь в каталоге Documents вашей системы Linux. Создадим три новых файла в каталоге Documents. Чтобы создать новые файлы текстового типа, попробуйте следующую сенсорную команду в оболочке, за которой следует имя нового файла. Как видите, мы создали три файла с именами «one.txt», «new.txt» и «test.txt».
Вы должны добавить некоторые текстовые данные или информацию в каждый файл отдельно, как вы можете видеть на изображениях ниже. Теперь сохраните все файлы и закройте.
Теперь вернитесь к терминалу и перечислите все файлы и папки, перечисленные в каталоге Documents. Выполните простую команду ls, чтобы сделать это, как показано ниже. У вас будет вывод всех файлов и папок, лежащих в каталоге Documents. Вы можете видеть, что недавно созданные и обновленные текстовые файлы также присутствуют.
Теперь наша очередь попробовать команду grep –R для каталога Documents и его файлов или папок. Мы будем использовать команду grep –R, чтобы исключить каталоги при использовании одного ключевого слова или уникального слова. У нас будет команда, которая будет искать это конкретное слово во всех файлах, находящихся в папке Documents, за исключением одного каталога, который был указан для исключения в команде. Итак, мы собираемся исключить каталог «Wild», который в настоящее время присутствует в каталоге «Documents». Итак, попробуйте следующую команду grep, чтобы исключить каталог «Wild» вместе с флагом –R, который использовался для рекурсивной функции, а «AndreyEx» использовался в качестве ключевого слова для поиска в файлах.
Посмотрим на оба файла. Попробуйте выполнить команду cat, чтобы увидеть, что файл «new.txt» содержит ключевое слово «AndreyEx».
Другой файл, «test.txt», содержащий ключевое слово «AndreyEx», был отображен с помощью приведенной ниже команды cat.
Теперь давайте исключим тот же каталог «Wild» из папки «Documents» с помощью другого ключевого слова «brave», если он находится в каких-либо файлах. Итак, попробуйте следующую команду grep, чтобы исключить каталог, как показано ниже. Выходное изображение показывает два совпадающих выходных файла для ключевого слова «brave» в двух файлах, «test.txt» и «one.txt».
Вы можете проверить, что файл «one.txt» содержит ключевое слово «Documents», используя команду cat.
В выводе файла «test.txt», можно проверить ключевое слово «brave» с использованием команды cat.
Пример 02:
Давайте перейдем в подкаталог «Wild» папки «Documents» с помощью команды cd в оболочке.
Давайте создадим три новых файла, «bin.txt», «had.txt» и «sec.txt» в каталоге «Wild», используя указанную ниже сенсорную команду. Добавьте текстовые данные во все файлы, сохраните и закройте их.
Давайте перечислим все каталоги, используя команду ls, как показано ниже. В нем вы найдете все три вновь созданных файла.
Давайте попробуем ту же команду grep в вашем командном терминале, чтобы исключить каталог «Wild» при использовании другого ключевого слова «I» в качестве соответствия, как показано ниже.
Теперь вывод этой команды показывает ключевое слово «I» в файлах, содержащихся в папке Documents, в то время как каталог «Wild» был проигнорирован с использованием ключевого слова «exclude-dir».
Теперь давайте исключим тот же каталог «Wild» с помощью другого ключевого слова «rimsha» из команды grep, показанной ниже в терминале.
Пример 03:
Давайте сначала перейдем в папку «Documents», используя команду cd, как показано ниже.
Теперь перечислим все файлы и папки с документами, используя команду ls ниже. Вывод показывает некоторый текст и другие файлы вместе с одним подкаталогом «Wild».
Воспользуемся той же командой grep, чтобы исключить каталог «Wild» из этой папки, используя ключевое слово «AndreyEx» во флаге. Вывод показывает четыре текстовых файла, в тексте которых есть слово «AndreyEx», в то время как каталог «Wild» был исключен и не проверялся.
Заключение:
Используя Ubuntu 20.04, мы уже понимаем, как и когда использовать команду grep –R. Команда grep чрезвычайно универсальна и помогает находить текст, встроенный в сотни документов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как исключить в Grep
В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью grep.
Исключить слова и шаблоны
Чтобы отображать только те строки, которые не соответствуют поисковому шаблону, используйте параметр -v (или –invert-match).
Например, чтобы напечатать строки, которые не содержат строку, nologinвы должны использовать:
Опция -w говорит grepвернуть только те строки, где указанная строка представляет собой целое слово (заключенные символы без слов).
По умолчанию учитывается регистр grep. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные. Чтобы игнорировать регистр при поиске, вызовите grep с опцией -i.
Если строка поиска содержит пробелы, вам необходимо заключить ее в одинарные или двойные кавычки.
Чтобы указать два или более шаблонов поиска, используйте опцию -e:
Вы можете использовать опцию -e сколько угодно раз.
Другой вариант исключения нескольких шаблонов поиска – объединение шаблонов с помощью оператора ИЛИ |.
В следующем примере печатаются строки, не содержащие строк nologin или bash:
GNU grepподдерживает три синтаксиса регулярных выражений: базовый, расширенный и совместимый с Perl. По умолчанию grepинтерпретирует шаблон как базовое регулярное выражение, в котором метасимволы, например, | теряют свое особое значение, и вы должны использовать их версии с обратной косой чертой.
Если вы используете опцию расширенного регулярного выражения -E, то оператор | не следует экранировать, как показано ниже:
Вы можете указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. В следующем примере исключаются строки games, в которых строка находится в самом начале строки:
Вывод команды может быть отфильтрован grepчерез конвейер, и только строки, соответствующие заданному шаблону, будут напечатаны на терминале.
Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются от имени пользователя «root», вы можете отфильтровать вывод команды ps:
Исключить каталоги и файлы
Иногда при выполнении рекурсивного поиска с опциями -r или -R вы можете захотеть исключить определенные каталоги из результатов поиска.
Чтобы исключить каталог из поиска, воспользуйтесь опцией –exclude-dir. Путь к исключенному каталогу относительно каталога поиска.
Вот пример, показывающий, как искать строку andreyex во всех файлах внутри /etc, за исключением каталога /etc/pki:
Чтобы исключить несколько каталогов, заключите исключенные каталоги в фигурные скобки и разделите их запятыми без пробелов.
Например, чтобы найти файлы , которые содержат строку «gnu» в вашей системе Linux исключая proc, bootи sysкаталоги , которые вы бы запустить:
При использовании сопоставления с подстановочными знаками вы можете исключить файлы, базовое имя которых совпадает с GLOB, указанным в опции –exclude.
В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за исключением файлов andreyex, оканчивающихся на .pngи .jpg:
Заключение
Команда grepпозволяет исключить шаблоны и каталоги при поиске файлов.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник