1. Що таке grep?
grep — це потужний інструмент командного рядка для пошуку рядків, що відповідають заданому шаблону, всередині текстових файлів. Думайте про grep як про "детектива" в світі Linux: він знаходить "докази" (текстові шаблони) в "справах" (файлах) і повідомляє, де вони знаходяться.
Назва grep походить від команди у текстовому редакторі ed: g/re/p, що розшифровується як "глобальний пошук за регулярним виразом та вивід знайденого".
grep використовується повсюдно: від пошуку помилок у логах до аналізу системних даних. Він не примхливий і готовий працювати з будь-яким текстом — будь то ваші щоденники чи логи з сервера.
2. Основний синтаксис
Структура команди:
grep [опції] "шаблон" файл
- [опції] — додаткові налаштування команди.
- "шаблон" — текст або регулярний вираз для пошуку.
- файл — ім'я файлу або файлів, в яких виконується пошук.
Якщо ти хочеш шукати текст у декількох файлах, просто переліч їх через пробіл, або скористайся символами * та ? для роботи з групами файлів.
Приклад:
grep "error" /var/log/syslog
3. Опції для зручного пошуку
1. -i: Ігнорування регістру
Ця опція дозволяє шукати текст незалежно від того, чи він у верхньому чи нижньому регістрі. Наприклад, Error, ERROR і error будуть знайдені одночасно.
Приклад використання:
grep -i "error" application.log
2. -v: Інверсний пошук
With great power comes great responsibility... Іноді нам важливо знайти все, що не відповідає шаблону. Наприклад, виключити рядки, що містять "debug".
Приклад використання:
grep -v "debug" system.log
3. -n: Вивід рядків із зазначенням номерів
Коли файл містить багато рядків, буває корисно вказати, де саме було знайдено співпадіння. Флаг -n додає номер рядка до кожного знайденого рядка.
Приклад використання:
grep -n "error" server.log
4. -r або -R: Рекурсивний пошук
Ви можете шукати шаблони тексту у файлах не лише в поточній директорії, але й у всіх її підкаталогах. Будьте обережні, якщо у вас тисячі файлів!
Приклад використання:
grep -r "keyword" /home/user/documents
4. Приклади використання
1. Пошук точного співпадіння
Шукаємо слово "hello" у файлі example.txt:
grep "hello" example.txt
2. Пошук фрагмента рядка
Спробуємо знайти рядки, що містять ім'я користувача, наприклад, "John":
grep "John" database.txt
3. Пошук з урахуванням регістру
Шукаємо строго "ERROR", не плутаючи з "error" або "Error":
grep "ERROR" log.txt
4. Рекурсивний пошук у директорії
Шукаємо рядки з повідомленням "fatal error" у всіх файлах поточного каталогу та його підкаталогах:
grep -r "fatal error" .
5. Інверсний пошук
Вивід усіх рядків, які не містять слово "error":
grep -v "error" server.log
6. Вивід лише перших 10 співпадінь
Якщо лог дуже довгий, ви можете обмежитися першими N повідомленнями:
grep "error" log.txt | head -n 10
7. Підрахунок рядків з помилками
Можна просто підрахувати кількість рядків з помилками, щоб морально налаштуватися на роботу:
grep -c "error" log.txt
8. Застосування фільтрів
Якщо в логу багато текстового сміття, використовуйте фільтри. Наприклад, далі ми шукаємо в логах помилки, що стосуються пам'яті:
cat /var/log/syslog | grep "memory"
5. Комбінація grep з іншими командами
У Linux команди люблять працювати разом (пробачте за тавтологію). Використовуючи пайпи |, ми можемо комбінувати grep з іншими утилітами. Давай розглянемо кілька практичних прикладів.
1. Фільтрація системних повідомлень
Хочеш дізнатися лише про помилки USB-пристроїв? Легко!
dmesg | grep "usb"
Тут ми передаємо вивід команди dmesg (перегляд системних повідомлень) у grep.
2. Застосування фільтрів
Якщо в логу багато текстового сміття, використовуй фільтри. Наприклад, далі ми шукаємо в логах помилки, що стосуються пам'яті:
cat /var/log/syslog | grep "memory"
3. Пошук серед процесів
Вивід усіх активних процесів, пов'язаних з nginx:
ps aux | grep "nginx"
6. Розширені можливості: регулярні вирази
Якщо простого пошуку недостатньо, grep підтримує потужний інструмент — регулярні вирази. Постарайся не лякатися, це не так складно, як може здатися.
Приклад регулярного виразу
Шукаємо рядки, які починаються з "error":
grep "^error" logfile.txt
Пояснення:
- Символ
^означає "початок рядка".
Шукаємо рядки, які закінчуються на ".conf":
grep "\.conf$" filelist.txt
Пояснення:
- Символ
$вказує на кінець рядка. - Зворотний слеш
\екранує символ., щоб він розпізнавався як точка, а не як будь-який символ.
Регулярні вирази — дуже потужний інструмент. Іноді навіть занадто потужний. Стара жарт: якщо у тебе є проблема, і ти хочеш вирішити її за допомогою регулярних виразів, то у тебе вже дві проблеми.
7. Практичне завдання
Щоб закріпити знання, виконайте наступні завдання:
У файлі
access.logзнайдіть рядки, що містять код відповіді сервера "404":grep "404" access.logУ каталозі
/var/logзнайдіть всі рядки, що містять слово "error", ігноруючи регістр:grep -ri "error" /var/logВиведіть всі рядки з файлу
database.log, які не містять слово "DEBUG":grep -v "DEBUG" database.logЗнайдіть у системних логах рядки, що містять дату "Oct 15":
grep "Oct 15" /var/log/syslogВиведіть рядки з файлу
application.logз збігом "timeout", але вкажіть номери рядків:grep -n "timeout" application.log
8. Часті помилки та особливості
Якщо нічого не відображається, це не обов'язково помилка. Можливо, просто немає збігів. Спробуй перевірити файл командою, наприклад,
cat, щоб переконатись, що в ньому є текст.Зверни увагу на лапки. Якщо шаблон містить пробіли або спецсимволи, обов'язково бери його в лапки.
Коли працюєш з великими каталогами та використовуєш флаг
-r, будь готовий до великої кількості виводу. Використовуй| lessдля зручного перегляду. Наприклад:grep -r "test" /some/directory | less
Тепер, коли ти повністю освоїв використання grep, ти готовий шукати що завгодно і де завгодно. Від пошуку багів в величезній кодовій базі до аналізу системних логів — твої навички пошуку стануть улюбленими інструментами.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ