Чи використовували ви раніше grep? Здебільшого основний grep-трюк може виконати більшу частину роботи. Однак grep пропонує безліч способів виконати пошук та тонке налаштування виводу на більш зручну версію. У цій статті давайте перевіримо використання команди grep.
Використання Grep
Перевірка існування
Якщо ви використовуєте будь-який дистрибутив Linux, то у вас вже встановлений grep. Виконайте наступну команду в терміналі.
grep --версія
Ця команда використовується для показу версії встановленого на даний момент grep. Тепер нам потрібен демонстраційний файл. У моєму випадку я буду створювати текстовий файл, який включає всі встановлені пакети в моїй системі.
Основи
Основне використання grep має наступну структуру.
grepАбо для легшого розуміння скористайтеся цим.
grepУ цьому випадку grep виконує пошук у файлі та друкує всі рядки, що містять шаблон (пошуковий термін).
grep python ~ / Робочий стіл / Список пакетів.txt
Греп здійснив пошук у файлі “PackageList.txt ”Я створив раніше і надрукував усі рядки, що містять“ python ”.
Цю саму операцію можна виконати іншим способом. Перегляньте наступний приклад.
cat ~ / Робочий стіл / Список пакетів.txt | grep python
Тут, використовуючи команду “cat”, я надіслав вміст файлу “PackageList.txt ”у grep. Використовуючи вихідні дані cat, grep здійснив пошук і надрукував рядки, що містять пошуковий термін.
Тепер приходить весела річ. Ви можете буквально складати кілька команд grep просто так.
cat ~ / Робочий стіл / Список пакетів.txt | grep - | grep p | grep python
Перший grep фільтрується до рядків з дефісом, другий фільтр до рядків з p, а остаточний grep фільтрується до рядків з python. Має сенс?
Чутливість до регістру
При виконанні пошуку головне питання - чутливість до регістру. За замовчуванням grep чутливий до регістру.
Наприклад, пошук за “Python” не покаже жодного результату.
cat ~ / Робочий стіл / Список пакетів.txt | grep Python
Щоб зробити регістр grep "нечутливим", додайте наступний параметр.
cat ~ / Робочий стіл / Список пакетів.txt | grep -i Python
Пошук файлів
Скажімо, у вас є каталог із численними текстовими файлами. Ваша мета - ідентифікувати файли, які містять або не містять шаблон (пошуковий термін).
Я вважаю цей метод цілком корисним при пошуку в купі файлів журналів. Оскільки у мене немає часу на відкриття та перевірку кожного окремого файлу вручну, у мене є grep, щоб зробити роботу за мене.
Для переліку файлів, що містять збіг, використовуйте прапорець -l.
grep -l
Як підказує результат, термін "python" присутній у всіх 3 файлах, що знаходяться в каталозі "Робочий стіл".
Для переліку файлів без будь-якого збігу використовуйте прапорець -L.
grep -L
“NoMatch.txt ”- єдиний файл, який не містить термін„ python ”.
Перевернутий пошук
Поведінка grep за замовчуванням - друк лише рядків із відповідним шаблоном, праворуч? Настав час змінити процес. Цього разу ми будемо друкувати лише рядки БЕЗ відповідного зразка.
Просто передайте опцію “-v” для grep.
cat ~ / Робочий стіл / Список пакетів.txt | grep -i -v Python
Друк рядків до / після матчу
За замовчуванням grep друкує лише той рядок, який відповідає шаблону пошуку. Використовуючи цю техніку, ви можете наказати grep також надрукувати рядки до / після матчу.
Для друку рядків перед матчем використовуйте таку структуру.
grep -B
Тут 5 - це рядок із номером, який grep надрукує ДО відповідного рядка.
Для друку рядків після матчу використовуйте наступний.
grep -A
Як щодо друку як до, так і після відповідного рядка? У такому випадку використовуйте прапор “-C”.
grep -C
Номер рядка
Коли grep показує вихідні дані, він не згадує номер рядка. Для відповідних номерів рядків використовуйте прапор “-n”.
grep -n
Одне слово
Якщо використовується прапор “-w”, grep буде розглядати шаблон як ціле слово.
grep -w
Обмеження пошуку grep
Grep дозволяє вказати кількість рядків для пошуку у файлі. Цей метод корисний, якщо ви маєте справу з великим файлом (наприклад, системним журналом). Використовуйте прапор “-m”.
grep -m
Рекурсивний пошук
Це одна з найбільш корисних функцій, яку пропонує grep для інтенсивного використання. Grep може рекурсивно шукати каталог і знаходити всі збіги з усіх файлів, з якими він стикається.
grep -RАбо,
grep -r
Я часто виявляю використання цієї рекурсивної функції разом із прапором “-l”.
Тихий режим
Grep можна запускати в "тихому" режимі. У режимі "тихого" режиму grep не надрукує жодних вихідних даних на терміналі. Натомість він поверне 0 (принаймні, збіг знайдено) або 1 (збіг не знайдено).
grep -qecho $?
Regex
Grep також дозволяє шукати регулярні вирази (регулярні вирази). Це додає абсолютно новий рівень складності та зручності використання grep як інструменту пошуку.
Наприклад, ви можете скористатися дужками для одночасного пошуку і "занадто", і "двох".
cat ~ / Робочий стіл / gpl-3.0.txt | grep t [wo] o
Цей наступний приклад надрукує рядок, лише якщо збіг відбувається на самому початку рядка.
grep ^ GNU ~ / Desktop / gpl-3.0.txt
Що стосується відповідності закінчення, використовуйте це.
grep вам $ ~ / Desktop / gpl-3.0.txt
Якщо ви хочете використовувати регулярний вираз Perl, використовуйте прапор “-P”. Він буде розглядати шаблон як регулярний вираз Perl.
grep -PЗаключні думки
Grep пропонує безліч способів налаштувати функцію пошуку. Наявність регулярного виразу відкриває цілий новий горизонт для потенційного використання grep. Класна річ, ви можете використовувати як загальний, так і Perl регулярний вираз; незалежно від того, з ким вам комфортно.
Щоб отримати найбільш детальне пояснення, завжди звертайтесь до сторінки керівництва.
людина grep
Ура!