- Использование grep¶
- Вывести несколько строк¶
- Регулярные выражения в grep¶
- Рекурсивный поиск фрагмента в файлах.¶
- Поиск слов в grep¶
- Поиск двух слов¶
- Количество вхождений строки¶
- Инвертированный поиск в grep¶
- Вывод имени файла¶
- Цветной вывод в grep¶
- 🐧 Как выполнить поиск Grep по всем файлам и во всех каталогах
- Поиск Grep во всех файлах каталога
- Рекурсивный поиск Grep во всех подкаталогах каталога
- Итак, в чем разница между grep -r и grep -R?
- Бонусный совет: Как исключить определенный каталог из рекурсивного поиска grep
- Подведем итоги
- You may also like
- 📜 Чтение файла построчно на Bash
- 📧 В чем разница между IMAP и POP3
- ✔️ Как управлять контейнерами LXD от имени обычного.
- 📜 Руководство для начинающих по созданию первого пакета.
- Феноменальная популярность электроники Xiaomi: основные причины
- 📜 Получение вчерашней даты в Bash: Практическое руководство
- Использование специальных гелей при мышечных болях
- 📦 Как расширить/увеличить файловую систему VxFS на Linux
- Услуги по размещению серверного оборудования в ЦОД
- Для чего выполняется ИТ консалтинг на предприятиях?
- Leave a Comment Cancel Reply
- • Свежие записи
- • Категории
- • Теги
- • itsecforu.ru
- • Страны посетителей
- IT is good
Использование grep¶
В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:
В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:
User:x:1000:1000:User. /home/User:/bin/bash
А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:
Вывести несколько строк¶
Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:
$ grep -A4 "EE" /var/log/xorg.0.log
Выведет строку с вхождением и 4 строчки после неё:
$ grep -B4 "EE" /var/log/xorg.0.log
Выведет целевую строку и 4 строчки до неё:
$ grep -C2 "EE" /var/log/xorg.0.log
Выведет по две строки с верху и снизу от вхождения.
Регулярные выражения в grep¶
Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:
Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:
$ grep "^Nov 10" messages.1 Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Поиск в конце строки — спецсимвол «$»:
$ grep "terminating.$" messages Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating. Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
Найдём все строки, которые содержат цифры:
Рекурсивный поиск фрагмента в файлах.¶
$ grep -r "mydomain.com" /etc/apache2/
Кавычки позволяют искать полное соотвествие с заданным шаблоном. Пример:
$ grep -r "zendsite" /etc/apache2/ /etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost /etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite /etc/apache2/vhosts.d/zendsite_vhost.conf:
Здесь перед найденной строкой указано имя файла, в котором она была найдена. Добавление параметра -n добавляет к выводу номер строки в файле, где найден заданный шаблон поиска. Вывод имени файла легко отключить с помощью опции -h:
$ grep -h -r "zendsite" /etc/apache2/ ServerName zendsite.localhost DocumentRoot /var/www/localhost/htdocs/zendsite
Это будет искать только те файлы, у которых есть.c или.h расширения:
$ grep --include=\*.c,h> -rnw '/path/to/somewhere/' -e "pattern"
Это исключает поиск всех файлов, заканчивающихся расширением.o:
$ grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Для каталогов можно исключить конкретный каталог через параметр –exclude-dir. Например, это исключает dir1/, dir2/dir2 и все из них, соответствующие * .dst/:
$ grep --exclude-dir=dir1,dir2,*.dst> -rnw '/path/to/somewhere/' -e "pattern"
Поиск слов в grep¶
Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:
Поиск двух слов¶
Можно искать по содержимому файла не одно слово, а два сразу:
$ egrep -w 'word1|word2' /path/to/file
Количество вхождений строки¶
Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):
Инвертированный поиск в grep¶
Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:
Вывод имени файла¶
Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:
Цветной вывод в grep¶
Также вы можете заставить программу выделять другим цветом вхождения в выводе:
$ grep --color root /etc/passwd
© Copyright 2020 Revision 10618177 .
Versions latest Downloads pdf html epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
🐧 Как выполнить поиск Grep по всем файлам и во всех каталогах
Универсальная команда grep позволяет выполнять поиск текста во всех файлах и всех подкаталогах каталога.
Grep – это отличный инструмент, когда вам нужно выполнить поиск по содержимому файла.
Обычно вы запускаете grep на одном файле, например, так:
grep search_term filename
Grep достаточно универсален.
Если вы хотите найти все файлы в каталоге с помощью grep, используйте его следующим образом:
Он ищет только во всех файлах в текущем каталоге.
Он не будет искать в подкаталогах.
Вы можете заставить grep искать во всех файлах и во всех подкаталогах текущего каталога, используя опцию -r рекурсивного поиска:
Вы также можете указать путь к каталогу, если вы находитесь не в том каталоге, в котором хотите выполнить поиск:
grep -r search_term directory_path
Позвольте мне показать вам все это в деталях с соответствующими примерами, чтобы вам было легче понять.
Поиск Grep во всех файлах каталога
Вот структура каталогов, которую я собираюсь использовать в этом примере.
За исключением файла empty.txt, все файлы содержат термин ‘simple’, по которому я буду выполнять поиск grep.
~/scripts$ tree . ├── dir1 │ └── new_script.sh ├── dir2 │ └── your_script.sh ├── dir3 │ ├── empty.txt │ └── linked.txt -> ../../sample.txt ├── my_script.sh └── your_script.sh 3 directories, 6 files
Для поиска слова ‘simple’ во всех файлах текущей директории достаточно использовать подстановочный знак (*).
Это приведет к поиску во всех файлах в текущих каталогах, но не зайдет в подкаталоги.
Поскольку вы не можете напрямую искать grep в каталоге, система выдаст ошибку “XYZ is a directory” вместе с результатами поиска.
Если вы находитесь не в том же каталоге, в котором хотите выполнить, вы можете указать путь к каталогу и закончить его символом /*
grep search_term directory_path/*
По сути, вы используете * для расширения всех элементов (файлов и каталогов) данного каталога.
Теперь, когда вы это знаете, давайте посмотрим, как можно выполнить рекурсивный поиск с помощью grep, чтобы он также просматривал файлы в подкаталогах.
Рекурсивный поиск Grep во всех подкаталогах каталога
Grep предоставляет опцию -r для рекурсивного поиска.
С этой опцией grep будет искать все файлы в текущем (или указанном) каталоге, а также все файлы во всех подкаталогах.
Вот рекурсивный поиск, который я выполнил в предыдущем примере:
Существует также опция -R для рекурсивного поиска, и она работает почти так же, как опция -r.
Итак, в чем разница между grep -r и grep -R?
На самом деле, только одна.
Поиск -R является поиском с разыменованием, что означает, что он будет следовать по символическим ссылкам, чтобы перейти к исходному файлу (который может находиться в какой-то другой части системы).
Если вы находитесь не в том каталоге, в котором хотите выполнить рекурсивный поиск, просто укажите команде grep абсолютный или относительный путь к каталогу:
grep -r search_term path_to_directory
Бонусный совет: Как исключить определенный каталог из рекурсивного поиска grep
Все вроде бы хорошо, но что если вы хотите исключить определенный каталог из рекурсивного поиска?
Для этого тоже есть соответствующая возможность.
Я уже говорил вам, что grep – чрезвычайно универсальная команда.
grep -r --exclude-dir=dir_name serach_term directory_path
Вы можете исключить из рекурсивного поиска более одного подкаталога следующим образом:
grep -r --exclude-dir= serach_term directory_path
Подведем итоги
Вот краткий обзор использования поиска grep для нескольких файлов и каталогов:
Команда Grep | Описание |
---|---|
grep string * | Поиск во всех файлах в текущем каталоге |
grep string dir | Поиск во всех файлах в каталоге dir |
grep -r string . | Рекурсивный поиск во всех файлах во всех подкаталогах |
grep -r string dir | Рекурсивный поиск во всех файлах во всех подкаталогах каталога dir |
grep -R string . | То же, что и r, но следует за символическими ссылками |
itisgood
☁️ Как установить Rclone на Linux и Unix
ТОП-10 ЛУЧШИХ ДИСТРИБУТИВОВ LINUX ДЛЯ НОУТБУКОВ В 2022 ГОДУ
You may also like
📜 Чтение файла построчно на Bash
📧 В чем разница между IMAP и POP3
✔️ Как управлять контейнерами LXD от имени обычного.
📜 Руководство для начинающих по созданию первого пакета.
Феноменальная популярность электроники Xiaomi: основные причины
📜 Получение вчерашней даты в Bash: Практическое руководство
Использование специальных гелей при мышечных болях
📦 Как расширить/увеличить файловую систему VxFS на Linux
Услуги по размещению серверного оборудования в ЦОД
Для чего выполняется ИТ консалтинг на предприятиях?
Leave a Comment Cancel Reply
• Свежие записи
• Категории
• Теги
• itsecforu.ru
• Страны посетителей
IT is good
В этой статье вы узнаете, как удалить удаленный Git-репозиторий. Процесс прост, но его полезно запомнить, чтобы избежать неожиданностей в будущем. Git – это…
В 11-й версии своей операционной системы Microsoft серьезно переработала интерфейс и убрала несколько привычных функций. Нововведения не всем пришлись по душе. Мы дадим…
Продажа ноутбука нередко становится хлопотным занятием. Кроме поиска покупателя, продавцу необходимо подготовить устройство перед проведением сделки. Но если последовательно выполнить все шаги, ничего…
Вы можете оказаться в ситуации, когда вам нужно использовать скрипт шелла для чтения файлов построчно. В этом руководстве я расскажу о нескольких способах…
Вторичное жильё выгоднее для молодых семей, желающих приобрести свою первую квартиру. Сталкиваясь с ипотечным кредитованием, можно избежать много лишней суеты и проблем, если…