Утилита grep, с которой мы сегодня познакомимся, - это инструмент Unix, принадлежащий к тому же семейству, что и утилиты egrep и fgrep. Все эти инструменты Unix предназначены для выполнения повторяющихся задач поиска в файлах и тексте. Вы можете искать файлы и их содержимое для извлечения полезной информации, задавая определенные критерии поиска с помощью команды grep.
Говорят, что GREP означает Global Regular Expression Print, но откуда взялась эта команда "grep"? grep в основном происходит от конкретной команды для очень простого и старого текстового редактора Unix под названием ed. Вот как выглядит команда ed:
1 | g/re/p |
Цель этой команды очень похожа на то, что мы подразумеваем под поиском с помощью grep. Эта команда собирает все строки в файле, соответствующие определенному текстовому шаблону.
Давайте рассмотрим команду grep подробнее. В этой статье мы расскажем об установке утилиты grep и приведем несколько примеров, с помощью которых вы сможете узнать, как и в каких сценариях ее можно использовать.
Установка grep
Утилита grep поставляется по умолчанию в большинстве систем Linux
Если она не установлена в вашей системе, откройте терминал Ubuntu или Debian, либо через Dash, либо с помощью сочетания клавиш Ctrl+Alt+T. Затем введите следующую команду от имени root, чтобы установить grep через apt-get:
1 | sudo apt-get install grep |
В CentOS
1 | sudo yum install grep |
Введите y, когда вам будет предложено выбрать y/n во время процедуры установки. После этого утилита grep будет установлена в вашей системе.
Вы можете убедиться в правильности установки, проверив версию grep с помощью следующей команды:
1 | grep --version |
Использование команды grep с примерами
Команду grep можно лучше всего объяснить, представив несколько сценариев, в которых она может быть использована. Вот несколько примеров:
Поиск файлов
Если вы хотите найти имя файла, содержащее определенное ключевое слово, вы можете отфильтровать список файлов с помощью команды grep следующим образом:
Синтаксис:
1 | ls -l | grep -i "слово" |
Примеры:
1 | ls -l | grep -i drives |
Эта команда выведет список всех файлов в текущем каталоге с именем файла, содержащим слово "drives".
Поиск строки в файле
С помощью команды grep можно получить предложение из файла, содержащее определенную строку текста.
Синтаксис:
1 | grep "строка" имя файла |
Пример:
1 | grep "Lorem" sample.txt |
Мой пример файла sample.txt содержит предложение со строкой "Lorem", которое вы можете видеть в приведенном выше выводе. В результатах поиска ключевое слово и строка отображаются в цветном виде.
Поиск строки в более чем одном файле
Если вы хотите найти предложения, содержащие вашу текстовую строку, во всех файлах одного типа, к вашим услугам команда grep.
Синтаксис 1:
1 | grep "строка" ИмяФайла* |
Синтаксис 2:
1 | grep "строка" *.расширение |
Пример1:
1 | grep "Vivamus" sample* |
Эта команда извлечет все предложения, содержащие строку "Vivamus" из всех файлов с именем, содержащим ключевое слово "sample".
Пример 2:
1 | grep "Vivamus" *.txt |
Эта команда извлечет все предложения, содержащие строку "Vivamus", из всех файлов с расширением .txt.
Поиск строки в файле без учета регистра строки
В приведенных выше примерах моя текстовая строка, к счастью, была в том же регистре, что и в моих образцах текстовых файлов. Если бы я ввел следующую команду, результатом поиска был бы ноль, потому что текст в моем файле не начинается со слова "Vivamus", написанного в верхнем регистре.
1 | grep "Vivamus" *.txt |
Давайте попросим grep игнорировать регистр строки поиска и выводить результаты поиска на основе этой строки с помощью опции -i.
Синтаксис:
1 | grep -i "строка" имя_файла |
Пример:
1 | grep -i "vivamus" *.txt |
Эта команда извлечет все предложения, содержащие строку "Vivamus", из всех файлов с расширением .txt. При этом не будет учитываться, в верхнем или нижнем регистре была строка поиска.
Поиск на основе регулярного выражения
С помощью команды grep вы можете задать регулярное выражение с начальным и конечным ключевым словом. На выходе вы получите предложение, содержащее все выражение между указанным вами начальным и конечным ключевым словом. Эта возможность очень удобна, так как вам не нужно писать целое выражение в команде поиска.
Синтаксис:
1 | grep "НачалоСтроки.*КонецСтроки" имя файла |
Пример:
1 | grep "Vivamus.*.pellentesque" sampleFile.txt |
Эта команда выведет предложение, содержащее выражение (начинающееся с моего Vivamus и заканчивающееся на моем pellentesque) из файла, который я указал в команде grep.
Вывод заданного количества строк после/перед строкой поиска
Вы можете использовать команду grep для печати N-ного количества строк до/после строки поиска из файла. Результат поиска также включает строку текста, содержащую строку поиска.
Синтаксис для N количества строк после ключевой строки:
1 | grep -A <N> "строка" имя_файла |
Пример:
1 | grep -A 3 -i "Vivamus" sample3.txt |
Вот как выглядит мой образец текстового файла:
А вот как выглядит вывод команды:
Выводится 3 строки, включая ту, которая содержит искомую строку, из файла, который я указал в команде grep.
Синтаксис для N количества строк перед ключевой строкой:
1 | grep -B <N> "строка" имя_файла |
Вы также можете искать N количество строк "вокруг" текстовой строки. Это означает N количество строк до и N после текстовой строки.
1 | grep -B 3 -i "Vivamus" sample3.txt |
Синтаксис для поиска N количества строк вокруг ключевой строки:
1 | grep -C <N> "строка" имя файла |
1 | grep -C 2 -i "Vivamus" sample3.txt |
Заключение
Благодаря простым примерам, описанным в этой статье, вы можете получить представление о команде grep. Затем вы можете использовать ее для поиска отфильтрованных результатов, которые могут включать файлы или содержимое файла. Это сэкономит много времени, которое тратилось на пролистывание всех результатов поиска до того, как вы освоили команду grep.