Ответ
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
}
}