Как использовать команду grep в linux

Как использовать команду grep в linux
просмотров: 970917 марта 2016 года

grep это вполне возможно самая популярная из существующих команд в Unix/Linux. Многие бы с этим поспорили, но стоит начать использовать grep, эта команда будет присутствовать почти во всех ваших скриптах для консоли Linux. grep расшифровывается как ‘global regular expression printer‘. Иными словами grep выдрезает нужные вам строки из текстовых файлов которые содержат указаный пользователем текст.

grep может быть использован двумя путями — сам по себе или в комбинации с потоками.

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

$ grep '12:00' /home/david/backup/log.txt

Эта команда показывает как можно использовать grep для того чтобы получить строки из файла содержащие подстроку указаную в командной строке. Файл не обязательно должен оканчиваться на .txt. Показаная выше команда производит поиск подстроки 12.00 в файле /home/david/backup/log.txt и отображает все строки где эта подстрока встречается.

Эта комбинация может быть использована например для поиска бекапов которые происходили в 12:00.

$ grep -v '12.00' /home/david/backup/log.txt

А вот эта команда (с использованием ключа -v) наоборот покажет только те строки где подстрока ’12:00′ не встречается.

$ grep -l 'delay' /code/*.c

Эта команда будет искать все файлы оканчивающиеся на .c и текст в найденых файлах соответствующий подстроке 'delay' и в конечном итоге выведет только имена файлов где эта подстрока встречается.

$ grep -w '\<bay' * $ grep -w 'watch\>' *

Эта команда уже более сложная и состоит из комбинации двух команд grep. Первая ищет строки которые начинаются со слова ‘bay’ а вторая строки которые заканчиваются на слово ‘watch’.

Использование grep вместе с потоками

$ ls -l | grep rwxrwxrwx

Вы наверно уже знаете что команда ls -l отображает подробный список файлов в директории. Часть grep rwxrwxrwx фильтрует результат полученый от ls -l и выводит только те директории у которых установлены соответствующие права доступа. В данном случае это открытый доступ на чтение, запись и поиск для всех пользователей и групп. Так что вместо того чтобы увидеть полный список файлов вы увидите только те файлы у которых установлены нужные вам права доступа.

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

$ du | grep 'mp3' | more

Вы должны уже догадаться что делает указаная выше команда :-) Если не догадались то все просто — она выводит постранично список mp3 файлов найденых в текущей директории. Все просто :-)

$ grep '^#' /home/david/script1 | more

Эта команда отобразит все строки в файле /home/david/script1 которые начинаются с символа ‘#’. Определение тип ‘^#’ означает что символ ‘#’ должен быть первым символом с троке.

$ grep -v '^[0-9]' /home/david/backup/log.txt | more

Эта команда ищет строки содержащие в первом символе цифры от 0 до 9 а потом выводит только те строки которые не попали в результаты поиска. Как вы видите — был использован ключ ‘-v’ означающий реверсивный поиск.

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

Некоторые дополнительные ключи команды grep:

  • -v : Выводи реверсивные результаты. Вместо того чтобы вывести строки где искомое было найдено — выводи те строки где искомой подстроки нет.
  • -c : Отключает стандартный способ вывода результата и вместо этого отображает только число обозначающее количество найденых строк.
  • -i : Делает поиск регистронезависимым
  • -w : Ведет поиск по цельным словам. Например при обычном поиске строки ‘wood’ grep может найти слово ‘hollywood’. А если используется данный ключ то будут найдены только строки где есть слово ‘wood’.
  • -l : Выводит только имена файлов где была найдена строка.
  • -r : Производит поиск рекурсивно по всем поддиректориям.

Я надеюсь эта небольшая инструкция поможет вам разобраться с этой полезной командой.

Источник

Поделиться

Что скажем?