Команда grep в Linux

Часто требуется найти в файле кусок текста или вывести на экран только часть информации, в этом нам поможет простая, но очень популярная утилита grep. Наиболее часто ее используют совместно с другими командами, добавив вертикальную черту "|" и название команды grep.

Утилита входит в состав GNU, решает много задач, она может вывести на экран отсортированный текст, а также находить строки в больших файлах за миллисекунды.

Синтаксис

Рассмотрим синтаксис.

grep [параметры] шаблон [имя файла]

Или так:

Команда | grep шаблон

Здесь под параметрами понимаются аргументы,  с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово "линукс", и не учитывать регистр при поиске. Тогда нужно использовать опцию "-i".

Шаблон - это выражение или строка.

Имя файла - где искать.

Основные параметры:

--help. Вывести справочную информацию.

-i. Не учитывать регистр при поиске.

-V. Узнать текущую версию.

-v. Инвертированный поиск.

-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.

-r. Поиск в каталогах, подкаталогах или рекурсивный grep.

-w. Искать как слово с пробелами.

-с. Опция считает количество вхождений (счетчик).

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

Примеры

Найдем все файлы в текущей директории где встречается слово "linux".

grep linux ./*

Поиск файлов где встречается слово linux

Здесь:

  • linux - слово которое нужно искать;
  • точка - текущая директория;
  • звездочка - искать во всех файлах.

Важно! По умолчанию операционная система Линукс учитывает регистр. То есть, если слово написано с большой буквы, а в поиске указано с маленькой, то grep его не найдет.

Чтобы начать поиск без учета регистра необходимо добавить аргумент "-i". В нашем примере получится так:

grep -i linux ./*

Без учета регистра
Поиск в конкретном документе.  Для примера найдем в документе "test" слово "хороший". Для этого с помощью утилиты "cd" зайдем в текущую директорию, где лежит файл "test". В моем случаи он находится в домашнем каталоге,  я ввожу просто "cd".

grep хороший test

Поиск хороший
Здесь:

  • хороший - слово которое нужно найти;
  • test - файл, где искать.

Рекурсивный поиск. Чтобы найти определенный текст в определенной директории, используют рекурсивный поиск. Для этого необходимо использовать параметр "-r". Найдем слово "vseprolinux" в домашнем каталоге root и его подкаталогах.

grep -r vseprolinux /etc/root

Рекурсивный grep

Найдем три слова сразу в одной строке "все про Линукс". Для этого будем использовать вертикальную черту и введет "grep" три раза.

grep "все" test | grep "про" | grep "Линукс"

Поиск 3 слова в одной строке

Команда grep может сообщить сколько раз встречается слово. Нам поможет опция -с. Посчитаем сколько раз встречается слово "site" в документе "file".

grep -c site file

Счетчик -с количество вхождений
Как видно на скриншоте выше, в файле "file" три раза встречается слово "site". Однако команда также считает выражение "mysite" за "site". Как сделать чтобы mysite не попал под счетчик?  Добавим опцию "-w."

grep -cw site file

cw Считаем вхождения

Для большей уверенности иногда слово "site" можно заключить кавычки, например когда нужно найти строку с пробелом.

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

Регулярные выражение в утилите "grep" - это мощная функция, которая расширяет возможности поиска. Чтобы активировать эту функцию или режим, используется аргумент "-e".

Символы в выражениях:

  • $ - конец строки;
  • ^ - начало строки;
  • [] - указывается диапазон значений или конкретные через запятую.

Найдем цифры 1-5 в документе "file".

grep [1-5] file

В скобках написано диапазон значений от одного до пяти, также можно написать конкретные значения через запятую, так: [1,2,3,4,5]

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

code



Ссылки в комментариях будут свободны от nofollow.