Іноді користувачі стикаються з необхідністю здійснення пошуку певної інформації всередині будь-яких файлів. Часто конфігураційні документи або інші об'ємні дані вміщують в собі велику кількість рядків, тому вручну відшукати потрібні дані не виходить. Тоді на допомогу приходить одна з вбудованих команд в операційні системи на Linux, яка дозволить виконати знаходження рядків буквально за лічені секунди.
зміст
Що стосується відмінностей між збірками Лінукс, в цьому випадку вони не грають ніякої ролі, оскільки цікавить вас команда grep за замовчуванням доступна в більшості збірок і застосовується абсолютно однаково. Сьогодні ми б хотіли обговорити не тільки дію grep, але і розібрати основні аргументи, які дозволяють значно спростити процедуру пошуку.
Читайте також: Шукаємо файли в Linux
Всі подальші дії будуть проводитися через стандартну консоль, вона ж дозволяє відкривати файли тільки шляхом вказівки повного шляху до них або якщо «Термінал» запущений з необхідною директорії. Дізнатися батьківську папку файлу і перейти до неї в консолі можна так:
cd /home/user/folder
, де user - ім'я користувача, а folder - назва папки. Задіюйте команду cat + название файла
, якщо хочете переглянути повний вміст. Детальні інструкції по роботі з цією командою шукайте в інший нашій статті по посиланню нижче.
Детальніше: Приклади команди cat в Linux
Завдяки виконанню наведених вище дій ви можете використовувати grep, перебуваючи в потрібній директорії, без вказівки повного шляху до файлу.
Перш ніж переходити до розгляду всіх доступних аргументів, важливо відзначити і звичайний пошук по вмісту. Він буде корисний у тих моментах, коли необхідно знайти простий збіг за значенням і вивести на екран всі відповідні рядки.
grep word testfile
, де word - шукана інформація, а testfile - назва файлу. Коли робите пошук, перебуваючи за межами папки, вкажіть повний шлях за прикладом /home/user/folder/filename
. Після введення команди натисніть на клавішу Enter. 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, але команда відобразить ще й User 123, Password User і інші збіги, якщо такі є. Щоб уникнути такого результату, надайте аргумент -w
( grep -w "word" + имя файла или его расположение
).
Виконується ця опція і при потребі пошуку відразу декількох точних ключових слів. У такому випадку введіть egrep -w 'word1|word2' testifile
. Зверніть увагу, що в цьому випадку до grep додається буква e, а лапки ставляться одинарні.
Вже згадана утиліта вміє не тільки знаходити слова в файлах, але і виводити рядки, в яких відсутня заданий користувачем значення. Тоді перед введенням ключового значення і файлу додається -v
. Завдяки їй при активації команди ви побачите тільки відповідні дані.
Синтаксис grep зібрав в собі ще кілька аргументів, про які можна коротко розповісти:
-I
- показувати тільки назви файлів, які підходять під критерій пошуку; -s
- відключити повідомлення про знайдені помилки; -n
- відображати номер рядка у файлі; -b
- показувати номер блоку перед рядком. Ніщо не заважає вам застосовувати кілька аргументів для одного знаходження, просто вводите їх через пробіл, не забуваючи враховувати регістр.
Сьогодні ми детально розібрали команду grep, доступну в дистрибутивах на Linux. Вона є однією з стандартних і часто використовуються. Прочитати про інших популярних інструментах і їх синтаксисі ви можете в окремому нашому матеріалі за наступним посиланням.
Читайте також: Часто використовувані команди в «Терміналі» Linux