Полезные опции для поиска файлов через grep



Иногда нужно найти один/несколько файлов, содержащих определённую строку в: логах, конфигах или исходном коде. Для этого очень часто под рукой оказывается утилита grep. Для сводки, интересные флаги и регулярные выражения для grep мы рассматривали тута.



По умолчанию команда фильтрует один файл. Для того чтобы выполнять поиск по каталогу, нужно добавить флаг "-r":





$ grep -r "root" /etc/

/etc/mdadm/mdadm.conf:MAILADDR root

...





Если хотим подсветить вхождения цветом, используем опцию "--color=always":





$ grep --color=always -r "root" /etc/





Опции "-C, -B, -A" вообще имбовые, использую их целую неделю) Вы можете включить отображение не только текущей строки, в которой было найдено вхождение, но и n строк до/после:



1) -C: выводит n строк до и после вхождения;





$ grep -C2 -r --color=always "Hello3" ./

./hello-Hello1

./hello-Hello2

./hello:Hello3

./hello-Hello4

./hello-Hello5





2) -B: выводит n строк перед вхождением;





$ grep -B2 -r --color=always "Hello3" ./

./hello-Hello1

./hello-Hello2

./hello:Hello3





3) -A: выводит n строк после вхождения;





$ grep -A2 -r --color=always "Hello3" ./

./hello:Hello3

./hello-Hello4

./hello-Hello5





Если наш шаблон поиска походит на регулярное выражения, нужно использовать флаг "-F". Таким образом мы говорим команде искать ровно то, что мы запросили - без скрытых подтекстов.



Без флага мы получим строки, в которых присутствует хотя бы 1 символ из набора (H, e, l, o). С флагом получим строки с буквальным совпадением:





$ grep "[Hello]" hello

Help me please

Helloup

[Hello]





$ grep -F "[Hello]" hello

[Hello]




LinuxCamp | #utils