grep вырезает нужные вам строки из текстовых файлов которые содержат указанный пользователем текст. grep расшифровывается как ‘global regular expression printer‘.
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 '' *
Эта команда уже более сложная и состоит из комбинации двух команд 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 : Производит поиск рекурсивно по всем поддиректориям.
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 '' *
Эта команда уже более сложная и состоит из комбинации двух команд 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 : Производит поиск рекурсивно по всем поддиректориям.
#Команда grep в linux
Дата публикации: 03 июля 2024 года