Опубликовано: 5 ноября 2022 г. 21:51 | Автор: echodiv | Категория: Администрирование | 👁 432

Поиск по содержимому файлов в Linux

Бывают ситуации, когда нужно найти какой-то текст внутри файла, но нет понимания в каком файле он находится. Это может быть поиск по логам, либо какая-то часть исходного кода. Не всегда можно открыть проект любимой IDE, чтобы найти и отредактировать нужные строки. 

Для этого в Linux есть достаточно большой набор инструментов. Посмотрим на них.

Во всех примерах будем искать интерфейс Stringer в исходном коде Golang.

1. Grep

Удобный и простой инструмент для поиска внутри файла. Де-факто стандарт.

grep -rn -C 5 "type Stringer interface" /usr/local/go/src/

Где команде grep передаются следующие параметры:

  • r - рекурсивный поиск внутри вложенных директорий и файлов
  • n - выводить номер строк в результате поиска
  • C 5 - показывает 5 строк до и после найденной строки. Мы сразу в результатах поска сможем увидеть комментарий к интерфейсу и метод, который в нём есть.
  •  "type Stringer interface" - искомая строка
  • /usr/local/go/src/ - корневая директория для поиска

Всё предельно просто и удобно. Рекомендую.

2. Find

Хороший инструмент для поиска файла. Найти потерянный лог для этой команды не проблема. Почему и как лог можно потерять история умалчивает. Инструмент очень мощный, но для поиска внутри файла будет использовать grep. 

find /usr/local/go/src/ -name '*.go' -type f -exec grep -H 'type Stringer interface' {} \;

Команда find вызывается со следующими параметрами:

  • /usr/local/go/src/ - корневая директория для поиска
  • '*.go' паттерн для имени файла. 
  • -type f - ищем по файлам
  • -exec grep -H 'type Stringer interface' {} \; а это сам поиск внутри файла. Применяется ко всем файлам подходящим по шаблон имени. -H нужен, чтобы понять в каком файле найдено совпадение.