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