Сегодня я расскажу о возможностях утилиты grep. Изначально она появилась еще в UNIX и на данный момент является частью любого дистрибутива BSD, Mac OS, Linux. Предназначение ее — поиск строк согласно условию, описанному регулярным выражением.

Существуют модификации классического grep — egrep, fgrep, rgrep. Все они заточены под конкретные цели, при этом возможности grep перекрывают весь функционал.

Итак, посмотрим на утилиту поближе.

Самым простым примером использования команды является вывод строки, удовлетворяющей шаблону, из файла.

Например мы хотим найти строку, содержащую ‘user’ в файле /etc/mysql/my.cnf. Для этого воспользуемся следующей командой:

Мы нашли нужную нам строку, но как потом найти ее в самом файле? Для этого мы добавим указание номера строки с помощью ключа -b.

Ключ -i в примере выше делает наш поиск регистронезависимым.

Теперь давайте попробуем вывести содержимое этого конфига без комментариев:

Благодаря ключу -v мы исключаем строки с символом #. «^» означает, что «#» должна находиться в начале строки.

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

grep часто используется в связке с программными каналами (pipes) для обработки вывода других утилит.

Например команда

вернет список устройств, содержащих sd в названии.

Команда

вернет все файлы, имеющиеся в системе, содержащие в названии ‘lala’.

Раскраска grep.

Иногда удобно, когда искомое нами слово подсвечивается цветом.

Все это уже есть в grep, остается только включить. Для этого в команде можно использовать ключ —color=auto.

Пример:

Искомая буква «a» подсветится цветом.

Для того, чтобы не писать каждый раз такой длинный ключ — создадим псевдоним grep в файле ~/.bashrc (Применимо только к  bash):

Теперь надо перечитать конфигурацию bash:

Все, теперь подсветка искомого слова будет включена по умолчанию.

Регулярные выражения.

Регулярные выражения — мощный инструмент, используемый во многих утилитах Linux. grep — не исключение. С помощью этих выражений можно описать любую искомую строку.

С помощью «|» можно указать условие «или». В примере ниже grep выдаст все строки с вхождениями user или db. Для обработки подобных выражений необходимо использовать ключ -E или использовать egrep.

Символами ^ и $ мы можем указать местоположение искомого слова. ^ обозначает начало строки, $ — его конец.

Найдем все строки, начинющиеся на #

Теперь найдем все строки, заканчивающиеся на «!»

А теперь отобразим номера пустых строк:

Поиск строк, содержащих цифру:

Поиск строк с двумя цифрами подряд:

Найдем все строки из двух символов:

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

Например:

Экранировать знак \ можно самим собой:

Теперь попробуем найти все ip адреса, указанные в формате XXX.XXX.XXX.XXX

Напоследок приведу маленькую таблицу с универсальными выражениями:

На этом все, спасибо за внимание.