Команда grep Linux используется как метод фильтрации ввода. GREP означает глобальный принтер для регулярных выражений, и поэтому для его эффективного использования вы должны иметь некоторые знания о регулярных выражениях.
В этой статье вы узнаете ряд примеров, которые помогут вам понять команду grep.
01 из 09Как искать строку в файле с помощью GREP

Представьте, что у вас есть текстовый файл, называемый книгами со следующими названиями детских книг:
- Робин Гуд
- Красная Шапочка
- Питер Пэн
- Златовласка и три медведя
- Белоснежка и семь гномов
- Pinnochio
- Кот в мешке
- Три маленьких поросенка
- Грюффало
- Чарли и шоколадная фабрика
Чтобы найти все книги со словом «The» в названии, вы должны использовать следующий синтаксис:
grep КнигиПолучены следующие результаты:
- Златовласка и три медведя
- Белоснежка и семь гномов
- Кот в мешке
- Три маленьких поросенка
- Грюффало
- Чарли и шоколадная фабрика
В каждом случае будет выделено слово «The».
Поиск чувствителен к регистру, поэтому, если в одном из названий «the» вместо «The», то он не был бы возвращен.
Чтобы игнорировать случай, вы можете добавить следующий переключатель:
grep книги --ignore-caseВы также можете использовать ключ -i следующим образом:
Продолжить чтение ниже
02 из 09Поиск строки в файле с использованием подстановочных знаков
Команда grep очень мощная. Вы можете использовать множество методов сопоставления шаблонов для фильтрации результатов.
В этом примере я покажу вам, как искать строку в файле с помощью подстановочных знаков.
Представьте, что у вас есть файл, называемый местами со следующими именами шотландских мест:
AberdeenАбериствитAberlourИнверуриплащ с капюшоном без рукавовНьюбергскаяновый оленьновый галлоуэйГлазгоЭдинбургЕсли вы хотите найти все места с inver в имени, используйте следующий синтаксис:
grep inver * местаПодстановочный знак звездочки (*) обозначает 0 или много. Поэтому, если у вас есть место под названием inver или место под названием Инвернесс, то оба будут возвращены.
Другим шаблоном, который вы можете использовать, является период (.). Вы можете использовать это для соответствия одной букве.
Место встречи grep inver.rВышеупомянутая команда найдет места, называемые inverurie и inverary, но не найдет invereerie, потому что между двумя r может быть только один подстановочный знак, обозначенный одним периодом.
Подстановочный шаблон периода полезен, но может вызвать проблемы, если у вас есть один из них в качестве части текста, который вы ищете.
Например, посмотрите на этот список доменных имен
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Чтобы найти все о .coms, вы можете просто выполнить поиск, используя следующий синтаксис:
grep * about * domainnamesВышеприведенная команда упадет, если в списке содержится следующее имя:
- everydaylinuxuser.com/about.html
Поэтому вы можете попробовать следующий синтаксис:
grep * about.com доменные именаЭто будет работать нормально, если не будет домена со следующим именем:
aboutycom.comЧтобы действительно искать термин about.com, вам нужно было бы избежать точки следующим образом:
grep * about .com domainnamesПоследним шаблоном для отображения вам является знак вопроса, который обозначает нуль или один символ.
Например:
grep? ber placenamesВышеупомянутая команда вернет aberdeen, aberystwyth или даже berwick.
Продолжить чтение ниже
03 из 09Поиск строк в начале и конце строки Использование grep
Знак carat (^) и доллара ($) позволяет вам искать шаблоны в начале и конце строк.
Представьте, что у вас есть файл под названием футбол со следующими именами команд:
- Блэкпул
- Ливерпуль
- Манчестер
- Лестер Сити
- Манчестер Юнайтед
- Ньюкасл Юнайтед
- ФК «Манчестер»
Если вы хотите найти все команды, которые начали с Манчестера, вы использовали бы следующий синтаксис:
Команда grep ^ МанчестерВышеупомянутая команда вернет Манчестер Сити и Манчестер Юнайтед, но не ФК «Манчестер».
Кроме того, вы можете найти все команды, заканчивающиеся United, используя следующий синтаксис:
Команда grep United $Вышеупомянутая команда вернется в «Манчестер Юнайтед» и «Ньюкасл Юнайтед», но не в «Манчестер».
04 из 09Подсчет количества совпадений Использование grep
Если вы не хотите возвращать фактические строки, соответствующие шаблону, используя grep, но вы просто хотите узнать, сколько из них вы можете использовать следующий синтаксис:
grep -c input inputfileЕсли шаблон был сопоставлен дважды, то число 2 будет возвращено.
Продолжить чтение ниже
05 из 09Поиск всех условий, которые не совпадают с использованием grep
Представьте, что у вас есть список имен мест в странах, перечисленных ниже:
- aberdeen Scotland
- Глазго Шотландия
- Ливерпульская Англия
- бухта Colwyn
- Лондон, Англия
Возможно, вы заметили, что в заливе Колвин нет страны, связанной с ней.
Для поиска всех мест в стране вы можете использовать следующий синтаксис:
grep land $ placesРезультатом возвращения будет все места, за исключением бухты Colwyn.
Это, очевидно, работает только для мест, которые заканчиваются на суше (вряд ли научны).
Вы можете инвертировать выбор, используя следующий синтаксис:
grep -v land $ placesЭто найдет все места, которые не заканчиваются землей.
06 из 09Как найти пустые строки в файлах с помощью grep
Представьте, что у вас есть файл ввода, который используется сторонним приложением, которое перестает читать файл, когда находит пустую строку следующим образом:
- aberdeen scotland
- Инвернесс Скотланд
- Ливерпульская Англия
- Colwyn Bay Wales
Когда приложение попадет на линию после ливерпуль, он перестанет читать, означая, что коловинская бухта полностью пропущена.
Вы можете использовать grep для поиска пустых строк со следующим синтаксисом:
grep ^ $ placesК сожалению, это не особенно полезно, потому что оно просто возвращает пустые строки.
Разумеется, вы могли бы подсчитать количество пустых строк в качестве проверки, чтобы убедиться, что файл действителен следующим образом:
grep -c ^ $ placesОднако было бы более полезно знать номера строк, которые имеют пустую строку, чтобы вы могли их заменить. Вы можете сделать это с помощью следующей команды:
grep -n ^ $ placesПродолжить чтение ниже
07 из 09Как искать строки с верхним или нижним регистром с помощью grep
Используя grep, вы можете определить, какие строки в файле имеют символы верхнего регистра, используя следующий синтаксис:
grep 'A-Z' filenameКвадратные скобки позволяют определить диапазон символов. В приведенном выше примере он соответствует любому символу, который находится между A и Z.
Поэтому для соответствия строчным символам можно использовать следующий синтаксис:
grep 'a-z' filenameЕсли вы хотите совместить только буквы, а не цифры или другие символы, вы можете использовать следующий синтаксис:
grep 'a-zA-Z' filenameВы можете сделать то же самое с числами следующим образом:
grep '0-9' filename 08 из 09Поиск повторяющихся шаблонов с использованием grep
Вы можете использовать фигурные скобки {} для поиска повторяющегося шаблона.
Представьте, что у вас есть файл с номерами телефонов следующим образом:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Вы знаете, что первая часть номера должна быть трехзначной, и вы хотите найти строки, которые не соответствуют этому шаблону.
Из предыдущего примера вы знаете, что 0-9 возвращает все числа в файле.
В этом случае мы хотим, чтобы строки начинались с трех чисел, а затем дефиса (-). Вы можете сделать это со следующим синтаксисом:
grep "^ 0-9 0-9 0-9 -" числаКак мы знаем из предыдущих примеров, карат (^) означает, что линия должна начинаться со следующего шаблона.
0-9 будет искать любое число от 0 до 9. Поскольку это включено три раза, оно соответствует 3 номерам. Наконец, есть дефис, чтобы обозначить, что дефис должен преуспеть в трех числах.
Используя фигурные скобки, вы можете сделать поиск меньшим следующим образом:
grep "^ 0-9 {3 } -" числаСлэш ускользает от {bracket, так что он работает как часть регулярного выражения, но в сущности говоря, это 0-9 {3}, что означает любое число от 0 до 9 три раза.
Кудрявые скобки также можно использовать следующим образом:
{5,10}{5,}{5,10} означает, что искомый символ должен повторяться не менее 5 раз, но не более 10, тогда как {5} означает, что символ должен повторяться не менее 5 раз, но может быть больше.
Продолжить чтение ниже
09 из 09Использование вывода из других команд Использование grep
До сих пор мы рассматривали соответствие шаблонов в отдельных файлах, но grep может использовать вывод из других команд в качестве входных данных для сопоставления шаблонов.
Отличным примером этого является использование команды ps, в которой перечислены активные процессы.
Например, выполните следующую команду:
ps -efОтобразятся все запущенные процессы в вашей системе.
Вы можете использовать grep для поиска конкретного работающего процесса следующим образом:
ps -ef | grep firefoxРезюме
Команда grep - это фундаментальная команда Linux, и она заслуживает изучения, так как это облегчит вашу жизнь при поиске файлов и процессов при использовании терминала.




