Про grep для початківців
Проста, ефективна та обов'язкова до вивчення утиліта для всіх, хто адмініструє UNIX-подібні ОС.
Як шукати?
У своїй основі grep гранично простий. Якщо вам потрібно пошукати щось за шаблоном у файлі, скористайтесь командою:
Ця команда виконає пошук за шаблоном у вказаному файлі і виведе в стандартний потік виведення рядка файлу, що містить шаблон.
grep — зручна утиліта у багатьох відношеннях. Один із очевидних варіантів використання – швидкий пошук у текстових файлах. Ви можете легко та швидко знаходити потрібне у лог-файлах та файлах конфігурації.
Існує також дуже поширене застосування grep - фільтрація потоку виведення інших програм. Давайте уявимо, наприклад, що вам потрібно одержати список всіх файлів, які встановлюються з пакета в каталог /usr/bin. У Debian-системах спробуйте:
Для систем з RPM команда виглядатиме так:
Таким чином, замість виведення повного списку всіх файлів пакета, ви отримаєте лише ті, які призначені для встановлення каталогу /usr/bin. Ви можете піти далі, і за допомогою наступного перенаправлення в grep, звузити результати фільтрації.
Як і все в UNIX, grep за умовчанням чутливий до регістру символів. Якщо вам це не підходить, просто додайте опцію -i до виклику grep, після чого рядки «ПОШУК» та «Пошук» стануть для неї рівнозначними.
Виконуючи пошук у файлах,grep вміє працювати рекурсивно. Щоб змуситиgrep працювати в такий спосіб, використовуйте опцію -r . А за умовчаннямgrep шукатиме лише у файлах, що знаходяться в поточному каталозі. Таким чином, якщо ви запустите щось на зразок
тоgrep буде шукати тільки у файлах, що знаходяться в поточному каталозі, перебуваючи в якому ви запустиликоманду.
Але якщо ви запустите
тоgrep дбайливо обійде всі вкладені підкаталоги та шукає шаблон у файлах знайдених підкаталогів.
Пошук навпаки
Що, якщо ви хочете знайти все, крім чогось?grep вміє і це теж. Використовуйте опцію -v і grep виводитиме лише ті рядки, якіне відповідають шаблону.
Якщо ви хочете, щоб grep відобразила лише імена файлів, що не містять рядка , відповідні шаблону, при цьому не виводячи самі рядки, використовуйте опцію-L.
Навпаки, якщо вам потрібні лише імена файлів, у яких відповідності шаблону знайдені, але самі рядки вам не потрібні, використовуйте-l.
Зрозуміло, ви можете комбінувати опції. Наприклад, щоб знайти файли, які не містять рядків, які відповідають шаблону, можна використовувати
Вам не потрібні імена файлів у виведенніgrep, а цікаві лише рядки — скористайтеся опцією -h іgrep не виводитимуть імена файлів.
За умовчаннямgrep виконує «жадібний» пошук. Тобто вона захоплює не тільки частину рядка, що відповідає шаблону, але й все після неї. Наприклад, якщо ви шукаєте "Beat", то grep буде вважати відповідністю і "Beatles", "Beaten", "Beats" і будь-який рядок, що містить "Beat". Така поведінка grep на практиці нечасто потрібна і ви можете обмежити її за допомогою опції-w. З цією опцієюgrep відбиратиме відповідності в межахслова.
У процесі пошуку за лог-файлами часто потрібно побачити, в якому контексті знайдено те чи інше. За умовчаннямgrep виводить лише рядок, у якому було знайдено збіг, але є кілька опцій, що дозволяють змуситиgrep виводити більше: -A (після контексту), -B (перед контекстом) і -C (Контекст).
Використовуючи ціопції, необхідно вказати саму опцію та ціле число, що визначає кількість рядків для виведення. Наприклад
виведе рядки, в яких знайдено відповідність, плюс 2 рядки до 2 після кожного знайденого.
Регулярні вирази
grep може виявитися не дуже корисною у повсякденному житті, якщо ви збираєтеся за допомогою її шукати лише якісь конкретні послідовності символів. А як бути з тим, якщо вам потрібно знайти, наприклад, лише цифри чи послідовність символів, до якої можуть входити лише певні символи чи їхні групи? Не проблема! Використовуючи регулярні вирази, ви отримуєте інструмент для вирішення чи не будь-якого завдання пошуку.
Давайте трохи розглянемо регулярні вирази, які, ймовірно, вам знадобляться. У командній оболонці символ зірочки відповідає будь-якому символу нуль або більше разів. Уgrep символ * має дещо інше значення. Тут цей символ необхідно згрупувати з іншими. Наприклад, якщо вам потрібен той самий ефект, як і в оболонці, використовуйте таке:
Якщо вам потрібно визначити якийсь шаблон один і більше разів, ви можете використовувати конструкцію +шаблон .
Символ ^ відповідає початку рядка, а символ $ - її кінцю. Наприклад, ви хочете знайти всі файли з розширенням .html , але вам не потрібні файли з розширенням.html.bak:
Якщо вам необхідно, щобgrep інтерпретувала спецсивмолы як звичайні - попередьте їх зворотним слішем. Наприклад команда
буде шукати рядки, що містять символ зірочки в filename.
У виразах можна використовувати діапазони та класи символів. Для цього при складанні шаблону grep використовуються квадратні дужки. Наприклад, символу в діапазоні від A до Z відповідатиме шаблон[A-Z], а будь-якій цифрі —[0-9]. Також, використовуючи квадратні дужки, ви можете визначати відповідністькласамсимволів. Наприклад, [:punct:] буде відповідати будь-якому розділовому знаку. Щоб знайти рядки, що містять розділові знаки в кінці, можна використовувати наступну команду:
Зверніть увагу на подвійні дужки. Взагалі, про використання регулярних виразів уgrep найкраще проконсультуйтеся з її man-сторінкою. Спочатку, розуміння того, що написано там, може даватися вам на деякий час, проте не полінуйтеся, і ви зможете опанувати потужний інструмент — регулярні висловлювання.
Найчастіше у виведенніgrep важко буває відразу ж відшукати відповідну шаблону частину рядка. Щоб спростити задачу візуального пошуку серед результатів видачіgrep, ви можете попросити її використовувати колір для позначки збігів. Просто додайте опцію --color=always або --color=auto.
Зверніть увагу, що в деяких дистрибутивах розробники створюють псевдонім дляgrep, що включає колір за промовчанням. Наприклад, у Linux Mint команда grep має псевдонім grep --color=auto. Якщо у вас схожа ситуація, використовуйте команду grep --color=off у випадках, коли вам не потрібен кольоровий висновок.
З кольором чи без,grep — утиліта, без якої собі не уявляють життя ні «просунуті користувачі», ні системні адміністратори. Звичайно, рядовим користувачам десктопів знання цієї утиліти може виявитися зовсім ні до чого, хоч і не буде великої шкоди, якщо вони з нею познайомляться. Але якщо ви збираєтеся працювати в Linux на вищому рівні, тоgrep - це одна з перших речей, які вам варто освоїти.