Ви коли-небудь стикалися із завданням пошуку певного рядка чи шаблону у файлі, але не знаєте, з чого розпочати пошук? Що ж, ось вам на допомогу grep!
grep – це потужна програма для пошуку шаблонів файлів, яка є у кожному дистрибутиві Linux. Якщо з будь-якої причини він не встановлений у вашій системі, ви можете легко встановити його через диспетчер пакетів, як показано нижче.
$ sudo apt install grep [On Debian, Ubuntu and Mint] $ sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/grep [On Gentoo Linux] $ sudo apk add grep [On Alpine Linux] $ sudo pacman -S grep [On Arch Linux] $ sudo zypper install grep [On OpenSUSE]
Я виявив, що найпростіший спосіб намочити ноги за допомогою команди grep – це просто зануритися у неї та використати кілька реальних прикладів.
1. Пошук та пошук файлів у Linux
Допустимо, ви тільки що встановили нову копію нової Ubuntu на свій комп’ютер і збираєтеся спробувати написати скрипт на Python.
Ви нишпорили в Інтернеті в пошуках посібників, але бачите, що використовуються дві різні версії Python, і ви не знаєте, яка версія Python встановлена в Ubuntu інсталятором і чи встановлені будь-які модулі.
Просто запустіть наступну команду dpkg з grep, як показано нижче:
# dpkg -l | grep -i python
Спочатку ми запустили dpkg –l, у якому перелічені встановлені пакети *.deb у вашій системі. По-друге, ми передали цей висновок у grep –i python, який просто каже: «перейдіть у grep, відфільтруйте та поверніть усе, що містить «python» у ньому».
Опція –i призначена для ігнорування регістру, оскільки grep чутливий до регістру. Використання параметра -i – це гарна звичка, якщо, звичайно, ви не намагаєтеся закріпити більш конкретний пошук.
2. Пошук та фільтрація файлів у Linux
Grep також можна використовувати для пошуку та фільтрації в окремих файлах або кількох файлах. Візьмемо цей сценарій:
У вас виникли проблеми з вашим веб-сервером Apache, і ви звернулися на один із безлічі чудових форумів у мережі з проханням про допомогу.
Добра душа, яка відповідає вам, попросила вас опублікувати вміст файлу /etc/apache2/apache2.conf. Хіба не було б легше для вас, для хлопця, який вам допомагає, і для всіх, хто читає це, якби ви могли вилучити всі закоментовані рядки? Ну ти можеш! Просто запустіть це:
# grep -v ^\# /etc/apache2/apache2.conf | grep .
Параметр –v вказує grep інвертувати висновок, тобто замість виведення рядків, що збігаються зробити навпаки і вивести всі рядки, що не відповідають виразу, в даному випадку рядки з коментарями #.
Зверніть увагу, що ми також використовували grep. наприкінці, щоб приховати виведення всіх порожніх рядків. Таким чином, ми бачимо лише налаштування конфігурації у нашому терміналі.
3. Знайти всі файли .mp3 в Linux
grep може бути дуже корисним для фільтрації з stdout. Наприклад, припустимо, що ви маєте цілу папку з музичними файлами в різних форматах.
Ви хочете знайти всі файли *.mp3 від виконавця JayZ, але вам не потрібні ніякі треміки. Використання команди find з парою каналів grep зробить свою справу:
# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”
У цьому прикладі ми використовуємо find для виведення всіх файлів з розширенням *.mp3, передаємо його в grep –i для фільтрації та друкування всіх файлів з ім’ям «JayZ», а потім ще один канал у grep –vi, який фільтрує out і не виводить всі імена файлів з рядком (принаймні) “remix”.
4. Відображення кількості рядків до або після пошуку.
Ще пара опцій — це перемикачі -A і -B, які відображають рядок, що збігається, і кількість рядків, які йдуть до або після рядка пошуку.
У той час як довідкова сторінка дає докладніше пояснення, мені здається, що найпростіше запам’ятати параметри як –A = після та –B = до:
# ifconfig | grep -A 4 inet # ifconfig | grep -B 2 UP
5. Друкує кількість рядків навколо збігу
Опція –C команди grep аналогічна, але замість того, щоб друкувати рядки, що йдуть до або після рядка, друкує рядки в будь-якому напрямку:
6. Підрахуйте кількість збігів
Подібно до передачі рядка grep в лічильник слів (команда wc), вбудована опція grep може зробити те саме для вас:
# ifconfig | grep -c inet6
7. Пошук файлів по заданому рядку в Linux
Опція –n для grep дуже корисна під час налагодження файлів під час помилок компіляції. Він відображає номер рядка у файлі заданого рядка пошуку:
# grep -n "main" setup.py
8. Рекурсивний пошук рядка у всіх каталогах
Якщо ви хочете шукати рядок у поточному каталозі разом із усіма підкаталогами, ви можете вказати параметр –r для рекурсивного пошуку:
# grep -r “function” *
9. Пошук всього патерну
Передача параметра -w у команду grep шукає весь шаблон, що міститься у рядку. Наприклад, використовуючи:
# ifconfig | grep -w "RUNNING"
Виведе рядок, що містить шаблон у лапках. З іншого боку, якщо ви спробуєте:
# ifconfig | grep -w "RUN"
Нічого не буде повернуто, тому що ми шукаємо не шаблон, а слово.
10. Пошук рядка у стислих файлах
На окрему згадку заслуговують похідні від grep. Перший це zgrep, який, як і zcat, призначений для використання з файлами, стиснутими gzip. Він приймає ті ж параметри, що і grep, і використовується так:
# zgrep -i error /var/log/syslog.2.gz
11. Відповідність регулярним виразам у файлах
Команда egrep – ще одна похідна від “Розширене глобальне регулярне вираження”. Він розпізнає додаткові метасимволи виразів, такі як +? | а також ().
egrep дуже корисний для пошуку вихідних файлів та інших фрагментів коду, якщо в цьому виникне потреба. Його можна викликати зі звичайного grep, вказавши параметр E.
# grep -E
12. Пошук фіксованого рядка шаблону
fgrep шукає у файлі або списку файлів фіксований рядок шаблону. Це те саме, що і grep -F. Звичайний спосіб використання fgrep – передати йому файл шаблонів:
# fgrep –f file_full_of_patterns.txt file_to_search.txt
Це лише відправна точка з grep, але, як ви, мабуть, бачите, вона безцінна для безлічі цілей. Крім реалізованих нами простих однорядкових команд, спочатку можна використовувати grep для написання потужних завдань cron і надійних сценаріїв оболонки.