Grep – це потужна команда UNIX, що дозволяє проводити пошук всередині файлу за різними параметрами.
Вона особливо корисна під час усунення несправностей чи налаштування. Команда grep має величезну кількість опцій та варіантів використання.
Швидше за все, вам ніколи не знадобитися чи не будуть у нагоді всі з них.
Однак в кінцевому підсумку ви будете використовувати декілька команд grep більшу частину часу.
У цій статті перераховані найпоширеніші команди grep із короткими прикладами.
Це корисно, якщо ви вже знайомі з командою grep, але завжди забуваєте, яка опція що робить.
Опція | приклад команди | Опис |
---|---|---|
i | grep -i pattern file | Пошук буз урахування регістру |
A | grep -A n pattern file | Показати n рядків після |
B | grep -B n pattern file | Показати n рядків перед |
C | grep -C n pattern file | Показати n рядків перед і після |
v | grep -v pattern file | Показати лінії, які не збігаються |
c | grep -c pattern file | Підрахунок кількості рядків, що збігаються |
I | grep -Ipattern file | Відображати лише імена файлів |
w | grep -w pattern file | Збіг точного слова |
e | grep -e regex file | Відповідність шаблону регулярки |
a | grep -a pattern file | Пошук у бінарних файлах |
r | grep -r pattern dir | Рекурсивний пошук у каталозі |
Швидкі приклади використання команди Grep
Ви, напевно, вже знаєте, що для пошуку певного тексту або шаблону у файлі потрібно використовувати команду grep наступним чином:
grep search_pattern filename
Розглянемо кілька найпоширеніших випадків використання команди grep.
Пошук без урахування регістру
За замовчуванням пошук за допомогою grep чутливий до реєстру.
Ви можете ігнорувати відповідність реєстру за допомогою опції -i:
grep -i holmes filename
Таким чином, grep повертатиме рядки, що відповідають і Holmes, і holmes.
Показати рядки до та після збігаються
За умовчанням ви бачите лише рядки, що збігаються.
Але коли ви усуваєте неполадки, корисно побачити кілька рядків до та/або після рядків, що збігаються.
Ви можете використовувати параметр -A, щоб показати рядки після збігу.
Запам’ятайте, A – це “After” (після).
Команда, показана нижче, покаже рядки, що збігаються, а також 5 рядків після збігу.
grep -A 5 search_pattern filename
Аналогічно, ви можете використовувати -B, щоб показати рядки перед збігаються.
Запам’ятайте, що B – це “Before” (До).
Команда, показана нижче покаже 5 рядків перед рядком що збігається разом із ним.
grep -B 5 search_pattern filename
Мені найбільше подобається опція -C, тому що вона показує лінії, які знаходяться до та після збігаються.
Запам’ятайте, що тут C означає “Circle” (Коло).
Команда нижче покаже 5 рядків до рядка що збігається, рядок і 5 рядків після рядка що збігається.
grep -C 5 search_pattern filename
Показати рядки, які не збігаються
Ви можете використовувати grep для відображення всіх рядків, які не відповідають заданому шаблону.
Ця “інвертована відповідність” використовується з опцією -v:
grep -v search_pattern filename
Ви можете комбінувати опції -i та -v.
Підрахунок кількості рядків, що збігаються
Замість того, щоб показувати рядки, що збігаються, ви можете просто дізнатися, скільки рядків відповідає шаблону за допомогою опції -c.
Це мала літера с.
grep -c search_pattern filename
Ви можете комбінувати опції -c та -v, щоб отримати кількість рядків, які не відповідають заданому шаблону.
Звичайно можна використовувати опцію -i, не чутливу до регістру.
Показати номери рядків, що збігаються
Щоб показати номери рядків, що збігаються можна використовувати опцію -n.
grep -n search_pattern filename
Те саме можна зробити з інвертованим пошуком.
Пошук у кількох файлах
Ви можете надати grep кілька файлів для пошуку.
grep search_pattern file1 file2
Це може спрацювати, але практичнішим прикладом є пошук у файлах певного типу.
Наприклад, якщо ви хочете шукати рядок тільки в скриптах оболонки (файли, що закінчуються на .sh), ви можете використовувати:
grep search_pattern *.sh
Рекурсивний пошук усіх файлів у каталозі
Ви можете виконати рекурсивний пошук за допомогою опції grep-r.
Вона шукатиме заданий шаблон у всіх файлах у поточному каталозі та його підкаталогах.
grep -r search_pattern directory_path
Показувати лише імена файлів
За замовчуванням grep показує всі рядки що збігаються.
Якщо ви запустили пошук у кількох файлах і хочете побачити лише ті файли, які містять рядок, ви можете використовувати опцію -l.
grep -l search_pattern files_pattern
Скажімо, ви хочете подивитись, які файли Markdown містять слово handbook, ви можете використовувати:
grep -l handbook *.md
Пошук лише повного слова
За замовчуванням grep показує всі рядки, що містять заданий рядок.
Це не завжди потрібне.
Якщо ви шукаєте слово ‘done’, він також покаже рядки, що містять слова ‘doner’ або ‘abandoned’.
Щоб змусити grep шукати тільки повне слово, можна використовувати опцію -w:
grep -w search_string file
Таким чином, при пошуку слова “done” будуть показані лише рядки, що містять “done”, а не “doner” чи “abandoned”.
Пошук за шаблонами регулярних виразів
Можна розширити пошук за допомогою шаблонів regex.
Існує спеціальна опція -e, що дозволяє використовувати шаблони regex, та опція -E, що дозволяє використовувати розширені шаблони regex.
grep -e regex_pattern file
Пошук того чи іншого шаблону
Ви можете шукати кілька шаблонів в одному пошуку grep.
Якщо ви хочете побачити рядки, що містять ті чи інші патерни, ви можете використовувати оператор |
Однак цей спеціальний символ необхідно екранувати таким чином.
grep 'pattern1\|pattern' filename
З оператором OR можна використовувати кілька шаблонів.
Для оператора AND немає спеціальної опції.
Для цього можна використовувати grep кілька разів із перенаправленням пайпу.
Пошук у бінарниках
За замовчуванням Grep ігнорує бінарні файли.
Ви можете змусити його виконувати, як у текстових, використовуючи опцію -a.
grep -a pattern binary_file
Якщо помітили помилки чи неточності, будь ласка, залишіть коментар чи напишіть листа на поштову адресу [email protected]