Ответ
grep (Global Regular Expression Print) — это мощная утилита командной строки в UNIX-подобных системах для поиска текстовых данных по шаблону (регулярному выражению) внутри файлов или в потоке ввода/вывода.
Почему это важно для Backend-разработчика:
Это один из основных инструментов для:
- Анализа логов: Быстрый поиск ошибок, трассировок запросов по ID, IP-адресу или сообщению.
- Поиска по кодовой базе: Найти все места использования функции, переменной или конфигурационного параметра.
- Работы с выводом других команд:
docker ps | grep my-containerдля поиска конкретного контейнера.
Часто используемые флаги:
-i— игнорировать регистр.-v— инвертировать поиск (вывести строки, не содержащие шаблон).-rили-R— рекурсивный поиск по всем файлам в директории.-n— показывать номера строк с совпадениями.-C <N>(Context) — показать N строк до и после совпадения.
Примеры:
# Найти все строки со словом "ERROR" в лог-файле
grep "ERROR" /var/log/app.log
# Рекурсивно найти все вызовы функции "ConnectDB" в текущей директории, игнорируя регистр
grep -ri "ConnectDB" .
# Показать 2 строки до и после найденной ошибки
grep -C 2 "panic: runtime error" /var/log/app.logАналог в Go:
В Go для подобной функциональности используется пакет regexp. Он позволяет компилировать регулярные выражения и применять их к строкам или потокам данных.
package main
import (
"fmt"
"regexp"
)
func main() {
logData := `
[2023-10-27 10:00:00] INFO: User logged in
[2023-10-27 10:01:15] ERROR: Failed to connect to database
[2023-10-27 10:01:15] DEBUG: Connection string: user:pass@tcp(127.0.0.1:3306)/db
[2023-10-27 10:02:00] INFO: Request processed
`
// Создаем регулярное выражение, аналог grep "ERROR"
re, err := regexp.Compile(`.*ERROR.*`)
if err != nil {
panic(err)
}
// Ищем все совпадения в строке
matches := re.FindAllString(logData, -1)
for _, match := range matches {
fmt.Println(match) // Выведет: [2023-10-27 10:01:15] ERROR: Failed to connect to database
}
}