12 практичних прикладів команди Linux Grep

Ви коли-небудь стикалися із завданням пошуку певного рядка чи шаблону у файлі, але не знаєте, з чого розпочати пошук? Що ж, ось вам на допомогу 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 і надійних сценаріїв оболонки.

Поділіться своєю любов'ю

Залишити відповідь

0 комментариев
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x