Пример использования команды Linux grep

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

В этой статье вы узнаете несколько примеров, которые помогут вам понять команду grep.

Как искать строку в файле с помощью GREP

Представьте, что у вас есть текстовый файл с названием books со следующими названиями детских книг:

  • Робин Гуд
  • Красная Шапочка
  • Питер Пэн
  • Златовласка и три медведя
  • Белоснежка и семь гномов
  • Pinnochio
  • Кот в мешке
  • Три маленьких поросенка
  • Граффало
  • Чарли и шоколадная фабрика

Чтобы найти все книги со словом «The» в названии, вы должны использовать следующий синтаксис:

grep Книги

Будут возвращены следующие результаты:

  • Златовласка и три медведя
  • Белоснежка и семь гномов
  • Кот в мешке
  • Три маленьких поросенка
  • Граффало
  • Чарли и шоколадная фабрика

В каждом случае слово «The» будет подсвечено.

В поиске учитывается регистр, поэтому, если бы у одного из заголовков было «the» вместо «The», он не был бы возвращен.

Чтобы игнорировать регистр, вы можете добавить следующий параметр:

grep the books –ignore-case

Вы также можете использовать ключ -i следующим образом:

grep -i книги

Поиск строки в файле с использованием подстановочных знаков

Команда grep очень мощная. Вы можете использовать множество методов сопоставления с образцом для фильтрации результатов.

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

Представьте, что у вас есть файл с именами мест со следующими шотландскими названиями мест:

aberdeen
aberystwyth
aberlour
inverurie
инверсия
Ньюбург
новый олень
новый галлоуэй
Глазго
эдинбург

Если вы хотите найти все места с инверсией в названии, используйте следующий синтаксис:

grep инверсия * местами

Звездочка (*) подстановочный знак обозначает 0 или много. Поэтому, если у вас есть место под названием Инверс или место под названием Инвернесс, то оба будут возвращены.

Другой подстановочный знак, который вы можете использовать, – точка (.). Вы можете использовать это, чтобы соответствовать одной букве.

grep inver.r мест

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

Подстановочный знак периода полезен, но он может вызвать проблемы, если он есть в тексте, который вы ищете.

Например, посмотрите на этот список доменных имен

  • linux.lifewire.com
  • pcsupport.lifewire.com
  • mp3.lifewire.com
  • minecraft.lifewire.com
  • androidgames.lifewire.com
  • netforbeginners.lifewire.com
  • everydaylinuxuser.com
  • google.co.uk
  • google.au
  • direct.gov.uk

Чтобы найти все о .coms, вы можете просто искать, используя следующий синтаксис:

grep * о * доменных именах

Вышеприведенная команда выпадет, если список будет содержать следующее имя:

  • everydaylinuxuser.com/about.html

Поэтому вы можете попробовать следующий синтаксис:

grep * lifewire.com имена доменов

Это будет работать нормально, если не было домена со следующим именем:

aboutycom.com

Чтобы по-настоящему искать термин lifewire.com, вам нужно уйти от точки следующим образом:

grep * о \ .com доменных именах

Последний подстановочный знак – знак вопроса, который обозначает ноль или один символ.

Например:

grep? ber топонимы

Вышеприведенная команда вернет абердин, аберистуит или даже бервик.

Поиск строк в начале и конце строки с использованием grep

Символ карата (^) и символ доллара ($) позволяют искать шаблоны в начале и конце строк.

Представьте, что у вас есть файл с названием “футбол” со следующими именами команд:

  • Блэкпул
  • Ливерпуль
  • Манчестер
  • Лестер Сити
  • Манчестер Юнайтед
  • Ньюкасл Юнайтед
  • ФК Юнайтед Манчестер

Если вы хотите найти все команды, которые начинали с Манчестера, вы бы использовали следующий синтаксис:

grep ^ Манчестерские команды

Приведенная выше команда вернет Манчестер Сити и Манчестер Юнайтед, но не ФК Юнайтед Манчестер.

Кроме того, вы можете найти все команды, заканчивающиеся на United, используя следующий синтаксис:

grep United $ team

Вышеуказанная команда вернется в «Манчестер Юнайтед» и «Ньюкасл Юнайтед», но не в «ФК Юнайтед» из Манчестера.

Подсчет количества совпадений с использованием grep

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

grep -c pattern inputfile

Если шаблон был сопоставлен дважды, будет возвращено число 2.

Найти все термины, которые не соответствуют, используя grep

Представьте, что у вас есть список географических названий со следующими странами:

  • Абердин Шотландия
  • Глазго Шотландия
  • Ливерпуль Англия
  • Colwyn Bay
  • Лондон, Англия

Возможно, вы заметили, что в Колвин-Бей нет страны, с которой он связан.

Для поиска всех мест в стране вы можете использовать следующий синтаксис:

grep land $ мест

Результаты будут возвращаться во все места, кроме Колвин-Бей.

Это, очевидно, работает только для мест, которые заканчиваются на суше (вряд ли научно).

Вы можете инвертировать выделение, используя следующий синтаксис:

grep -v Land $ мест

Это найдет все места, которые не заканчиваются землей.

Как найти пустые строки в файлах, используя grep

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

  • Абердин Шотландия
  • Инвернесс Шотландия
  • ливерпуль англия
  • Колвин Бэй Уэльс

Когда приложение попадает в строку после Ливерпуля, оно прекращает чтение, что означает, что залив Colwyn полностью пропущен.

Вы можете использовать grep для поиска пустых строк со следующим синтаксисом:

grep ^ $ мест

К сожалению, это не особенно полезно, потому что оно просто возвращает пустые строки.

Конечно, вы можете получить количество пустых строк в качестве проверки, чтобы убедиться, что файл действителен следующим образом:

grep -c ^ $ мест

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

grep -n ^ $ мест

Как искать строки из заглавных или строчных букв, используя grep

Используя grep, вы можете определить, какие строки в файле имеют заглавные буквы, используя следующий синтаксис:

grep ‘[A-Z]’ имя файла

Квадратные скобки [] позволяют определить диапазон символов. В приведенном выше примере это соответствует любому символу, который находится между A и Z.

Поэтому для сопоставления строчных букв вы можете использовать следующий синтаксис:

grep ‘[a-z]’ имя файла

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

grep ‘[a-zA-Z]’ имя файла

Вы можете сделать то же самое с числами следующим образом:

grep ‘[0-9]’ filename

Поиск повторяющихся шаблонов с использованием 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 \} -” числа

Косая черта выходит за скобку {так, что она работает как часть регулярного выражения, но по сути это означает [0-9] {3}, что означает любое число от 0 до 9 три раза.

Фигурные скобки также можно использовать следующим образом:

{5,10}
{5,}

{5,10} означает, что искомый символ должен повторяться не менее 5 раз, но не более 10, тогда как {5,} означает, что символ должен повторяться не менее 5 раз, но это может быть больше.

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

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

Отличным примером этого является использование команды ps, которая выводит список активных процессов.

Например, запустите следующую команду:

ps -ef

Все запущенные процессы в вашей системе будут отображены.

Вы можете использовать grep для поиска определенного запущенного процесса следующим образом:

ps -ef | grep firefox

Резюме

Команда grep – это фундаментальная команда Linux, которую стоит изучить, поскольку она значительно облегчит вашу жизнь при поиске файлов и процессов при использовании терминала.

Оцените статью
Solutics.ru
Добавить комментарий