Команда Linux grep используется в качестве метода фильтрации ввода. GREP означает «Принтер глобальных регулярных выражений», поэтому для его эффективного использования необходимо иметь некоторые знания о регулярных выражениях.
В этой статье вы узнаете несколько примеров, которые помогут вам понять команду grep.
- Как искать строку в файле с помощью GREP
- Поиск строки в файле с использованием подстановочных знаков
- Поиск строк в начале и конце строки с использованием grep
- Подсчет количества совпадений с использованием grep
- Найти все термины, которые не соответствуют, используя grep
- Как найти пустые строки в файлах, используя grep
- Как искать строки из заглавных или строчных букв, используя 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, которую стоит изучить, поскольку она значительно облегчит вашу жизнь при поиске файлов и процессов при использовании терминала.