Поиск по сайту:

Как использовать команду grep в Debian 10


Grep означает глобальную печать регулярных выражений. Это полезная команда, широко используемая системными инженерами Linux при поиске строки или шаблонов в обычных файлах и в системе.

В этой статье я собираюсь продемонстрировать использование команды grep на большом количестве примеров. Я протестировал все команды и примеры на машине с Debian 10.

Предварительное условие

Вам понадобится одна машина с Debian 10 с правами root.

Установка команды grep в Debian 10

По умолчанию grep установлен в большинстве систем, включая Debian 10. Если он не установлен, откройте терминал и введите следующую команду с правами root.

apt-get install grep

Когда вас попросят подтвердить, нажмите y, а затем введите с клавиатуры. Подождите завершения установки.

Поскольку grep уже установлен на моей машине, проверьте скриншот выше. Давайте проверим его версию, выполнив следующую команду на терминале.

grep --version

Он также должен вернуть версию вместе с другими деталями, как показано ниже.

Использование команды grep

Как только на нашей машине появится команда grep, мы сможем с ней поиграть.

Поиск определенного файла или каталога в вашей системе

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

ls -l | grep -i "имя файла или каталога"

Я хочу найти сетевой каталог в /etc/. Полная команда должна выглядеть следующим образом.

ls -l /etc/ | grep -i "network"

Опция «i» игнорирует чувствительность к регистру. Следовательно, он должен рассматривать сеть, Network или NETWORK как одинаковые.

Ниже приведен пример вывода.

Предположим, я хочу найти файл «interfaces.d», расположенный в /etc/network/, вам нужно выполнить следующую команду.

ls -l /etc/network/ | grep -i "interfaces.d"

Необходимо заключить искомое слово в двойные кавычки, если оно содержит пробелы. Предположим, мы ищем «сетевой демон», приведенная выше команда должна выглядеть следующим образом.

ls -l /etc/сеть/ | grep -i "демон интерфейсов"

Поиск полного слова с помощью grep

Возможно, вы заметили, что grep возвращает всевозможные результаты, включая «сеть», например. сети, сетевые, сетевые или abcnetworking и т. д. Если вы хотите ограничить поиск, включив в него это конкретное слово, вам нужно использовать опцию -w следующим образом.

ls -l /etc/ | grep -i -w network

Ниже приведен пример вывода.

Поиск определенного текста в файле

У нас есть случай, когда у вас большой файл и вы хотите выполнить поиск по определенному тексту. Синтаксис команды должен быть следующим.

grep - i "textyouwanttosearch" "имя файла и путь"

Предположим, я хочу найти слово «лиса» в файле test.txt, который находится внутри моего текущего каталога. Запустите следующую команду на терминале.

grep -i "fox" test.txt

Ниже приведен пример вывода, который возвращает только те строки файла, которые содержат слово «лиса».

Выполнение рекурсивного поиска (поиск в нескольких файлах)

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

grep -i -r "fox"

Ниже приведен пример вывода, который показывает, что слово fox присутствует как в файлах test.txt, так и в файлах Tree.txt в показанной строке.

Вы также можете указать путь к каталогу, и он будет искать все файлы в этом каталоге и его подкаталогах.

Предположим, я хочу выполнить рекурсивное исследование текстовых «интерфейсов» в /etc/ и его подкаталогах. Команда должна быть выполнена следующим образом.

grep -i -r interfaces /etc/

Ниже приведен пример вывода.

Поиск двух разных слов с помощью одной команды grep

Вы можете искать два разных слова с помощью одной команды egrep (которая является разновидностью grep) следующим образом. Предположим, я хочу выполнить поиск полных слов fox и lazy в нескольких файлах, используя опцию -r. Вам необходимо запустить следующую команду на терминале.

egrep -w -r "fox|lazy"

Ниже приведен пример вывода.

Нумерация строк, соответствующих тексту

Еще одна полезная опция — это -n, который нумерует строки, соответствующие тексту. Ниже приведен пример, иллюстрирующий использование опции -n.

grep -i -n "fox" test.txt

Ниже приведен пример вывода, номера строк которого соответствуют слову «лиса».

Инвертирование поиска

Это противоположно тому, что мы сделали выше. Если вы хотите вернуть текст, который не содержит указанного вами слова, вы можете использовать опцию -v.

Ниже приведен пример, демонстрирующий использование опции -v.

grep -v -i "fox" test.txt

Ниже приведен пример вывода.

Все вышеперечисленные параметры (-n и т. д.) также можно применить с параметром -v.

Подсчет матчей

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

Посчитаем слово «лиса» в test.txt, расположенном внутри текущего каталога. Запустите следующую команду на терминале.

grep -i -c fox test.txt

Ниже приведен пример вывода после выполнения указанной выше команды, который показывает, что слово fox трижды соответствует файлу test.txt.

Отображение имен файлов, соответствующих конкретному тексту

Если вы хотите найти файлы, содержащие ваше конкретное слово, вы можете использовать параметр -l вместе с -r  следующим образом. Предполагается, что все файлы расположены внутри вашего текущего каталога, а конкретное слово, которое вы ищете или сопоставляете, — «лиса».

grep -i -r -l fox

Ниже приведен пример вывода, который показывает, что слово fox присутствует внутри test.txt, а также в подкаталоге и файле asif.txt.

Отображение только совпавшего текста

По умолчанию grep показывает всю строку, соответствующую желаемому тексту или слову. Если вы хотите, чтобы grep показывал вам совпавшие слова, вы можете использовать опцию -o следующим образом.

grep -i -o fox test.txt

Ниже приведен пример вывода.

Отображение строк, начинающихся с определенного слова (слов)

Если вы хотите получить все строки, начинающиеся с определенного слова (слов), вы можете использовать оператор ^следующим образом.

Предположим, вы хотите вернуть все те строки, которые начинаются с «unix», а файл log.txt находится внутри вашего текущего каталога.

Запустите следующую команду на терминале.

grep -i "^unix" log.txt

Ниже приведен пример вывода.

Отображение строк, которые заканчиваются определенным словом (словами)

Если вы хотите вернуть все эти строки из файла, которые заканчиваются определенным словом (словами), вы можете использовать оператор $следующим образом. Предположим, что слово «linux», а файл, который вы хотите найти, — это rev.txt, расположенный внутри вашего текущего каталога.

Запустите следующую команду на терминале.

grep -i "linux$" rev.txt

Ниже приведен пример вывода.

Итак, это был мой урок по использованию команды grep. Я продемонстрировал большинство опций grep, которые чаще всего используются и которые могут вам понадобиться в повседневной работе. Существует несколько вариантов команды grep, включая zgrep и т. д. Вы можете изучить их самостоятельно.