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

grep означает «Global Regular Expression Print». Это полезная утилита командной строки, предоставляемая Linux, для поиска текстовой строки, которая соответствует шаблону, указанному пользователем.

grep принимает ввод от пользователя в виде строк или слов, которые пользователь хочет найти в определенном файле. Затем команда проверяет указанный пользователем файл на наличие этого шаблона и возвращает строки, которые соответствуют предоставленному шаблону.

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

В этой статье мы подробно рассмотрим функционирование команды grep на некоторых практических примерах.

Опции, доступные с командой grep

Это некоторые из основных параметров, которые вы будете часто использовать в команде grep.

ВариантОписание
-iДля поиска без учета регистра
-rДля рекурсивного поиска всех файлов в указанном каталоге и его подкаталогах
-cЧтобы отобразить общее количество появлений строки
-vДля отображения несовпадающих строк
-wФильтр по конкретному слову, используемому отдельно

Используя команду grep

Команда grep обычно используется с утилитой pipe (|). Она может быть реализована с помощью оболочки pipe, когда вы хотите использовать ее с некоторыми другими командами Linux. Хотя, grep может также использоваться индивидуально без утилиты pipe (|).

Давайте рассмотрим некоторые основные синтаксисы команды grep с использованием утилиты pipe и без нее.

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

INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
cartesian coordinates
importance of all th cartesian coordinates.
Following are two empty lines.



use of a bullock cart is a common sight in the village for the agrarian chores.

This is the end of the sample file.

grep используется с утилитой pipe (|)

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

Синтаксис:

[command] | grep [string]

Пример:

cat sample.txt | grep legislature

Здесь я использовал команду cat для отображения некоторых строк из файла ‘sample.txt’. Должны быть отображены только те строки, которые содержат слово ‘legislature’, а остальные строки проигнорированы.

Вывод:

gaurav@ubuntu:~/workspace$ cat sample.txt | grep legislature
india stands on three pillars of legislature, executive and judiciary.
gaurav@ubuntu:~/workspace$

grep используется без pipe |

grep может даже использоваться напрямую как отдельная команда без использования утилиты pipe |.

Синтаксис:

grep [string_to_be_searched] [filename]

Пример:

grep India sample.txt

Вывод:

India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource

Таким образом, я использовал команду grep напрямую для фильтрации строк, содержащих строку «India» из текстового файла «sample.txt».


Поиск без учета регистра с помощью команды grep

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

Давайте рассмотрим это на примере.

grep peace sample.txt

В этом случае мы не получим вывод, так как в файле-образце нет слова «peace». У нас есть слово «Peace» с заглавной «P». Слово то же самое, но когда мы используем команду grep без каких-либо опций, она ищет точное совпадение в файле, игнорируя любые изменения в регистре букв.

Чтобы избежать этой двусмысленности, вы можете просто использовать опцию -i, которая буквально сообщает команде grep: «забудь о регистре, в который я поместил строку, и просто найди все совпадающие шаблоны в файле».

Синтаксис:

grep -i [string] [filename]

Пример:

grep -i peace sample.txt

Вывод:

INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
India Is a Beautiful Country Of Peace Loving People.

Все совпадающие строки отображаются независимо от регистра, в котором находится совпадающая строка.


Рекурсивный поиск с использованием grepкоманды

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

Синтаксис:

grep -i -r [string] [file_path]

Пример:

grep -i -r tomcat /home/gaurav/workspace

Строка здесь — ‘tomcat’, и она будет найдена в каталоге workspace. Все подкаталоги и файлы в каталоге ‘workspace’ также будут просканированы на соответствие указанному шаблону строки.

Вывод:

./context_log.policy:// catalina.policy - Security Policy Permissions for Tomcat 7
./context_log.policy:// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
./context_log.policy://  grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
./context_log.policy:grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
./context_log.policy:    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
./context.xml:    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
./catalina.properties:# - Tomcat Bootstrap JARs
./catalina.properties:# - Tomcat API JARs
./catalina.properties:# - Tomcat JARs
./catalina.properties:# - Common non-Tomcat JARs
./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.char.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000
./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000
./server.xml:              pathname="conf/tomcat-users.xml" />
./server.xml:    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
./server.xml:    <Connector executor="tomcatThreadPool"
./server.xml:         every request.  The Engine implementation for Tomcat stand alone
./tomcat-users.xml:<tomcat-users>
./tomcat-users.xml:  <user username="role1" password="tomcat" roles="role1"/>
./tomcat-users.xml:</tomcat-users>
./web.xml:  <!-- loaded into this instance of Tomcat.  As each application is         -->
./web.xml:  <!-- used by Tomcat to support JSP pages.  Traditionally, this servlet    -->

ПРИМЕЧАНИЕ: При использовании опции -r с командой grep нам необходимо указать путь к файлу, а не имя файла.


Поиск только целых слов с помощью команды grep

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

Запутались? Не волнуйтесь, все станет гораздо проще понять, как только вы увидите пример.

Пример:

Здесь я хочу выполнить поиск по отдельному слову «cart» и отобразить все строки, соответствующие этому слову в файле «sample.txt».

grep -i cart sample.txt

Вывод:

Cartesian coordinates
importance of all the Cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores
The cart went missing as the boy left it loose.

В выводе вы можете заметить, что слово «Cartesian» также содержит слово «cart», и, следовательно, строки, содержащие слово «Cartesian», также отображаются, хотя мы не хотим, чтобы они отображались.

Для разрешения этой неоднозначности можно использовать опцию -w с командой grep.

Синтаксис:

grep -i -w [string] [filename]

Пример:

grep -i -w cart sample.txt

Вывод:

use of a bullock cart is a common sight in the village for the agrarian chores.
The cart went missing as the boy left it loose.

Теперь, если вы использовали опцию w, вы получите только те строки, в которых слово «cart» используется целиком.


Обратный поиск с использованием команды grep

Команда grep также может быть использована в обратном порядке. Мы можем использовать команду grep наоборот, скрывая совпадающие строки и отображая только те строки, где совпадение не найдено. Вы можете сделать это с помощью опции -v с командой grep.

Синтаксис:

grep -i -v [string] [filename]

Пример:

grep -i -v resource sample.txt

Вывод:

INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
cartesian coordinates
importance of all th cartesian coordinates.


use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.

В выходных данных отображаются все остальные строки, кроме строки, содержащей слово «ресурс».


Подсчет вхождений совпадающей строки

Вывод команды grep обычно очень длинный, если данные в файле обширны. Чем больше совпадений, тем длиннее вывод команды grep. Linux предоставляет вам опцию, с помощью которой вы можете отобразить количество совпадений.

Синтаксис:

grep -i -c [string] [filename]

Пример:

grep -i -c india sample.txt

Вывод:

gaurav@ubuntu:~/workspace$ grep -i -c india sample.txt
4
gaurav@ubuntu:~/workspace$

Здесь выводом является число, представляющее собой количество появлений слова «Индия» в файле sample.txt.

ПРИМЕЧАНИЕ: Я использовал опцию -i в каждом примере, чтобы просто обезопасить себя от проблемы чувствительности к регистру. Если вы уверены в регистре слова, которое ищете, то вы можете спокойно пропустить опцию -i.


Заключение

В этом руководстве мы изучили основные способы использования команды grep в системах Linux. Мы также научились отображать различный контент, который наилучшим образом соответствует нашим требованиям, не перегружая терминал множеством строк. Команда grep, несомненно, сэкономит время, если ее использовать для сканирования больших наборов данных.