Навчальний посібник із регулярних виразів Linux: приклад регулярного виразу Grep

⚡ Розумний підсумок

Регулярні вирази Linux — це спеціальні послідовності символів, які шукають дані та зіставляють складні шаблони в таких інструментах, як grep, sed та vi, використовуючи базові, інтервальні, розширені та фігурні дужки форми для точної фільтрації тексту.

  • 🔎 які вони: Регулярні вирази, скорочені до regexp або regex, описують текстові шаблони для пошуку та зіставлення.
  • 🧩 Базовий набір: Такі символи, як . ^, $ * та \, прив'язують, повторюють та екранують символи у шаблоні.
  • 🔢 Інтервал: Фігурні дужки, такі як {n} та {n,m}, контролюють, скільки разів повторюється попередній символ.
  • Розширений: За допомогою grep -E, \+ та \? знаходять один або декілька та нуль або один екземпляр символу.
  • 🧵 Розширення брекетів: Фігурні дужки генерують кілька рядків із послідовності або списку, розділених комами.
  • 🛠️ Де використовується: Такі інструменти, як grep, sed, tr та vi, використовують регулярні вирази для фільтрації тексту.
  • 🤖 Допомога ШІ: Асистенти ШІ та GitHub Copilot можуть швидко генерувати, пояснювати та налагоджувати шаблони регулярних виразів.

Регулярні вирази Linux з grep — приклади базових, інтервальних та розширених регулярних виразів

Регулярні вирази є однією з найпотужніших функцій Linux текстові інструменти, що дозволяють вам зіставляти, фільтрувати та перетворювати дані за допомогою компактних шаблонів. На цій сторінці пояснюються базові, інтервальні та розширені форми, а також розкриття фігурних дужок, з прикладами роботи grep.

Що таке регулярні вирази Linux?

Регулярні вирази Linux – це спеціальні символи, які допомагають шукати дані та зіставляти складні шаблони. Регулярні вирази скорочуються як «regexp» або «regex». Вони використовуються в багатьох програмах Linux, таких як GREP, bash, перейменування, sed та інші.

Типи регулярних виразів

Для легшого розуміння давайте вивчимо різні типи регулярних виразів один за одним. Ця сторінка охоплює базові, інтервальні та розширені регулярні вирази, а також завершується розкриттям фігурних дужок.

Основні регулярні вирази

Деякі з часто використовуваних команд, що працюють з регулярними виразами, це tr, sed, vi, та grep. У таблиці нижче наведено деякі основні регулярні вирази.

Symbol Опис
. Замінює будь-який символ
^ Збігається з початком рядка
$ Збігається з кінцем рядка
* Збігається з попереднім символом нуль або більше разів
\ Представляє спеціальні символи
() Групує регулярні вирази
? Збігається рівно з одним символом

Розглянемо приклад. Спочатку запустіть команду cat sample, щоб відобразити вміст існуючого файлу, як показано нижче.

Приклад команди cat для відображення вмісту існуючого файлу в терміналі

Далі знайдіть вміст, що містить літеру «a». На скріншоті нижче показано, як grep повертає кожен рядок, що містить літеру «a».

grep шукає у файлі зразка рядки, що містять літеру a

Каретка '^' відповідає початку рядка. У наведеному нижче прикладі виконується пошук вмісту, який починається з літери 'a'.

grep з каретним анкером, що відповідає лише рядкам, що починаються з літери a

Фільтруються лише рядки, що починаються з символу . Рядки, що не містять символу 'a' на початку, ігноруються.

Розглянемо інший приклад. На скріншоті нижче знову показано вміст зразка файлу перед фільтрацією за кінцем рядка.

Зразок вмісту файлу, показаний перед фільтрацією рядків, що закінчуються літерою t

Виберіть лише ті рядки, що закінчуються літерою «t», використовуючи символ «$», як показано нижче.

grep з доларовим якорем, вибираючи лише рядки, що закінчуються на літеру t

Інтервальні регулярні вирази

Ці вирази визначають кількість входжень символу в рядок. Вони перелічені нижче.

вираз Опис
{не} Точно відповідає попередньому символу, який з’являється 'n' разів
{n,m} Збігається з попереднім символом, який з'являється 'n' разів, але не більше m
{n,} Збігається з попереднім символом, лише якщо він з’являється «n» разів або більше

Наприклад, відфільтруйте всі рядки, що містять символ «p». На знімку екрана нижче показано відповідні рядки.

grep фільтрує файл зразка на наявність рядків, що містять символ p

Тепер перевірте, чи символ 'p' зустрічається в рядку рівно два рази, один за одним. Синтаксис для цього такий:

cat sample | grep -E p\{2}

Результат інтервального матчу показано нижче.

grep -E інтервальний вираз, що відповідає символу p, що зустрічається рівно двічі

Примітка. До цих регулярних виразів потрібно додати -E.

Розширені регулярні вирази

Ці регулярні вирази поєднують більше одного виразу. Деякі з них:

вираз Опис
\+ Збігається з одним або кількома випадками попереднього символу
\? Відповідає нулю або одному повторенню попереднього символу

Наприклад, пошукайте всі входження символу «t». Знімок екрана нижче показує результат.

grep шукає у файлі зразка всі рядки, що містять символ t

Припустимо, ви хочете відфільтрувати рядки, де символ «a» стоїть перед символом «t». Ви можете скористатися командою, подібною до наведеної нижче:

cat sample|grep "a\+t"

Результат показано на наступному скріншоті.

Розширений вираз grep, що відповідає одному або кільком символам a, за якими йде t

Розширення дужки

Синтаксис для розкриття фігурних дужок – це або послідовність, або список елементів, розділених комами, у фігурних дужках '{}'. Початковий та кінцевий елементи в послідовності розділяються двома крапками '..'.

Деякі приклади наведено нижче.

Команда echo з використанням розкриття фігурних дужок для генерації кількох рядків з послідовності та списку

У наведених вище прикладах команда echo створює рядки за допомогою розкриття фігурних дужок, створюючи кілька рядків з одного шаблону.

Поширені запитання

grep за замовчуванням використовує прості регулярні вирази. egrep дозволяє розширені вирази (те саме, що й grep -E), а fgrep знаходить фіксовані рядки без регулярного виразу (grep -F). Сучасний GNU grep позначає egrep та fgrep як застарілі, тому перевагу надають grep -E та grep -F.

Класи символів відповідають категорії символів. Вирази у дужках, такі як [az], відповідають діапазону, тоді як класи POSIX, такі як [[:alpha:]], [[:digit:]] та [[:space:]], відповідають літерам, цифрам та пробілам. Вони забезпечують читабельність та переносимість шаблонів у різних локалях.

Додайте опцію -i, наприклад, grep -i “hello” sample. Це відповідає Hello, HELLO та hello. Без -i регулярні вирази чутливі до регістру, тому велика літера та її мала форма розглядаються як два різні символи.

Символи підстановки оболонки (глобінг) розширюють імена файлів, де * означає будь-які символи, а ? — один символ. Регулярні вирази відповідають тексту всередині файлів, де * означає нуль або більше попередніх символів. Одні й ті ж символи означають різні речі в кожному контексті.

Використайте опцію -o, наприклад, grep -o “a\+t” sample. Замість того, щоб виводити весь рядок, grep виводить лише ту частину, яка відповідає шаблону, по одному збігу на рядок. Це корисно, наприклад, дляtracзначення, такі як електронні адреси або номери.

Використовуйте чергування з символом вертикальної риски. У розширеному режимі grep -E “cat|dog” sample знаходить рядки, що містять cat або dog. У базовому режимі ви повинні екранувати його як grep “cat\|dog” sample. Чергування дозволяє одній команді шукати кілька шаблонів одночасно.

Помічники на основі штучного інтелекту можуть перетворити опис простою англійською мовою на робочий регулярний вираз, пояснити, що робить загадковий шаблон, і запропонувати виправлення, коли збіг не вдається. Інструменти машинного навчання також виявляють повторювані шаблони у великих файлах журналів, які було б нудно писати від руки.

Так. Копілот GitHub пропонує команди grep та регулярні вирази безпосередньо з коментаря або часткового шаблону під час введення тексту. Це пришвидшує написання складних виразів, хоча вам слід перевірити будь-який згенерований шаблон на реальних зразках даних, перш ніж покладатися на нього.

Підсумуйте цей пост за допомогою: