Іноді користувачі стикаються з необхідністю здійснення пошуку певної інформації всередині будь-яких файлів. Часто конфігураційні документи або інші об'ємні дані вміщують в собі велику кількість рядків, тому вручну відшукати потрібні дані не виходить. Тоді на допомогу приходить одна з вбудованих команд в операційні системи на Linux, яка дозволить виконати знаходження рядків буквально за лічені секунди.
Використовуємо команду grep в Linux
Що стосується відмінностей між збірками Лінукс, в цьому випадку вони не грають ніякої ролі, оскільки цікавить вас команда grep за замовчуванням доступна в більшості збірок і застосовується абсолютно однаково. Сьогодні ми б хотіли обговорити не тільки дію grep, але і розібрати основні аргументи, які дозволяють значно спростити процедуру пошуку.
Задіюйте команду cat + назва файлу, якщо хочете переглянути повний вміст. Детальні інструкції по роботі з цією командою шукайте в інший нашій статті по посиланню нижче.
Детальніше: Приклади команди cat в Linux
Завдяки виконанню наведених вище дій ви можете використовувати grep, перебуваючи в потрібній директорії, без вказівки повного шляху до файлу.
Стандартний пошук по вмісту
Перш ніж переходити до розгляду всіх доступних аргументів, важливо відзначити і звичайний пошук по вмісту. Він буде корисний у тих моментах, коли необхідно знайти простий збіг за значенням і вивести на екран всі відповідні рядки.
- У командному рядку введіть grep word testfile, де word - шукана інформація, а testfile - назва файлу. Коли робите пошук, перебуваючи за межами папки, вкажіть повний шлях за прикладом / home / user / folder / filename. Після введення команди натисніть на клавішу Enter.
- Залишилося тільки ознайомитися з доступними варіантами. На екрані відобразяться повні рядки, а ключові значення будуть виділені червоним кольором.
- Важливо враховувати і регістр букв, оскільки кодування Linux не оптимізована для пошуку без урахування великих або маленьких символів. Якщо ви хочете обійти визначення регістра, впишіть grep -i "word" testfile.
- Як бачите, на наступному скріншоті результат змінився і додалася ще одна нова рядок.
Пошук із захопленням рядків
Іноді користувачам необхідно знайти не тільки точний збіг по рядках, але і дізнатися інформацію, яка йде після них, наприклад, при звіті про певну помилку. Тоді правильним рішенням буде застосувати атрибути. Впишіть в консоль grep -A3 "word" testfile, щоб включити в результат і три наступні рядки після збігу. Ви можете написати -A4, тоді будуть захоплені чотири рядки, обмежень ніяких немає.
Якщо замість -A ви застосуєте аргумент -B + кількість рядків, в результаті відобразяться дані, що знаходяться до точки входження.
Аргумент -С, в свою чергу, захоплює рядки навколо ключового слова.
Нижче ви можете побачити приклади привласнення зазначених аргументів. Зверніть увагу, що обов'язково потрібно враховувати регістр і проставляти подвійні лапки.
grep -B3 "word" testfile
grep -C3 "word" testfile
Пошук ключових слів на початку і в кінці рядків
Потреба визначення ключового слова, яке стоїть на початку або в кінці рядка, найчастіше виникає під час роботи з файлами, де кожна лінія відповідає за один параметр. Для того щоб побачити точне входження на початку, необхідно прописати grep "^ word" testfile. Знак ^ якраз і відповідає за застосування цієї опції.
Пошук вмісту в кінці рядків відбувається приблизно за таким же принципом, тільки в лапках слід додати знак $, і команда знайде такий вигляд: grep "word $" testfile.
Пошук чисел
При пошуку потрібних значень користувач не завжди має інформацію щодо точного слова, присутнього в рядку. Тоді процедуру пошуку можна робити через числа, що іноді значно спрощує завдання. Треба лише задіяти розглянуту команду у вигляді grep "[0-7]" testfile, де «[0-7]» - діапазон значень, а testfile - назва файлу для сканування.
Аналіз всіх файлів директорії
Сканування всіх об'єктів, що знаходяться в одній папці, називається рекурсивним. Користувачеві потрібно застосувати тільки один аргумент, який проведено аналіз всіх файлів папки і виведе на екран відповідні рядки і їх розташування. Знадобиться ввести grep -r "word" / home / user / folder, де / home / user / folder - шлях до директорії для сканування.
Блакитним кольором буде відображатися місце зберігання файлу, а якщо хочете отримати рядки без цієї інформації, надайте ще один аргумент, щоб команда вийшла такою grep -h -r "word" + шлях до папки.
Точний пошук за словами
На початку статті ми вже говорили про звичайному пошуку по словам. Однак при такому методі в результатах будуть висвітлюватися додаткові комбінації. Наприклад, ви знаходите слово User, але команда відобразить ще й User123, PasswordUser і інші збіги, якщо такі є. Щоб уникнути такого результату, надайте аргумент -w (grep -w "word" + ім'я файлу або його розташування).
Виконується ця опція і при потребі пошуку відразу декількох точних ключових слів. У такому випадку введіть egrep -w 'word1 | word2' testifile. Зверніть увагу, що в цьому випадку до grep додається буква e, а лапки ставляться одинарні.
Пошук рядків без певного слова
Вже згадана утиліта вміє не тільки знаходити слова в файлах, але і виводити рядки, в яких відсутня заданий користувачем значення. Тоді перед введенням ключового значення і файлу додається -v. Завдяки їй при активації команди ви побачите тільки відповідні дані.
Синтаксис grep зібрав в собі ще кілька аргументів, про які можна коротко розповісти:
- -I - показувати тільки назви файлів, які підходять під критерій пошуку;
- -s - відключити повідомлення про знайдені помилки;
- -n - відображати номер рядка у файлі;
- -b - показувати номер блоку перед рядком.
Ніщо не заважає вам застосовувати кілька аргументів для одного знаходження, просто вводите їх через пробіл, не забуваючи враховувати регістр.
Сьогодні ми детально розібрали команду grep, доступну в дистрибутивах на Linux. Вона є однією з стандартних і часто використовуються. Прочитати про інших популярних інструментах і їх синтаксисі ви можете в окремому нашому матеріалі за наступним посиланням.
Читайте також: Часто використовувані команди в «Терміналі» Linux