Часто требуется найти в файле кусок текста или вывести на экран только часть информации, в этом нам поможет простая, но очень популярная утилита grep. Наиболее часто ее используют совместно с другими командами, добавив вертикальную черту "|" и название команды grep.
Утилита входит в состав GNU, решает много задач, она может вывести на экран отсортированный текст, а также находить строки в больших файлах за миллисекунды.
Содержание
Синтаксис
Рассмотрим синтаксис.
grep [параметры] шаблон [имя файла]
Или так:
Команда | grep шаблон
Здесь под параметрами понимаются аргументы, с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово "линукс", и не учитывать регистр при поиске. Тогда нужно использовать опцию "-i".
Шаблон - это выражение или строка.
Имя файла - где искать.
Основные параметры:
--help. Вывести справочную информацию.
-i. Не учитывать регистр при поиске.
-V. Узнать текущую версию.
-v. Инвертированный поиск.
-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.
-r. Поиск в каталогах, подкаталогах или рекурсивный grep.
-w. Искать как слово с пробелами.
-с. Опция считает количество вхождений (счетчик).
-e. Регулярные выражения.
Примеры
Найдем все файлы в текущей директории где встречается слово "linux".
Здесь:
- linux - слово которое нужно искать;
- точка - текущая директория;
- звездочка - искать во всех файлах.
Важно! По умолчанию операционная система Линукс учитывает регистр. То есть, если слово написано с большой буквы, а в поиске указано с маленькой, то grep его не найдет.
Чтобы начать поиск без учета регистра необходимо добавить аргумент "-i". В нашем примере получится так:
Поиск в конкретном документе. Для примера найдем в документе "test" слово "хороший". Для этого с помощью утилиты "cd" зайдем в текущую директорию, где лежит файл "test". В моем случаи он находится в домашнем каталоге, я ввожу просто "cd".
Здесь:
- хороший - слово которое нужно найти;
- test - файл, где искать.
Рекурсивный поиск. Чтобы найти определенный текст в определенной директории, используют рекурсивный поиск. Для этого необходимо использовать параметр "-r". Найдем слово "vseprolinux" в домашнем каталоге root и его подкаталогах.
Найдем три слова сразу в одной строке "все про Линукс". Для этого будем использовать вертикальную черту и введет "grep" три раза.
Команда grep может сообщить сколько раз встречается слово. Нам поможет опция -с. Посчитаем сколько раз встречается слово "site" в документе "file".
Как видно на скриншоте выше, в файле "file" три раза встречается слово "site". Однако команда также считает выражение "mysite" за "site". Как сделать чтобы mysite не попал под счетчик? Добавим опцию "-w."
Для большей уверенности иногда слово "site" можно заключить кавычки, например когда нужно найти строку с пробелом.
Регулярные выражения.
Регулярные выражение в утилите "grep" - это мощная функция, которая расширяет возможности поиска. Чтобы активировать эту функцию или режим, используется аргумент "-e".
Символы в выражениях:
- $ - конец строки;
- ^ - начало строки;
- [] - указывается диапазон значений или конкретные через запятую.
Найдем цифры 1-5 в документе "file".
В скобках написано диапазон значений от одного до пяти, также можно написать конкретные значения через запятую, так: [1,2,3,4,5]