Урок за регулярен израз на Linux: Пример за Regex на 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 програми, като например Впиши, bash, rename, sed и други.

Видове регулярни изрази

За по-лесно разбиране, нека разгледаме различните видове регулярни изрази един по един. Тази страница обхваща основни, интервални и разширени регулярни изрази и завършва с разгъване на скоби.

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

Някои от често използваните команди, които работят с регулярни изрази, са tr, sed, viи grep. Таблицата по-долу изброява някои от основните регулярни изрази.

символ Descriptйон
. Заменя всеки символ
^ Съвпада с началото на низ
$ Съвпада с края на низ
* Съвпада с нула или повече пъти на предходния символ
\ Представлява специални символи
() Групира регулярни изрази
? Съвпада точно с един символ

Нека видим пример. Първо, изпълнете командата cat sample, за да покажете съдържанието на съществуващ файл, както е показано по-долу.

примерна команда cat, показваща съдържанието на съществуващ файл в терминала

След това потърсете съдържание, съдържащо буквата „a“. Екранната снимка по-долу показва, че grep връща всеки ред, който съдържа „a“.

grep търси в примерния файл редове, съдържащи буквата a

Каретката „^“ съвпада с началото на низ. Примерът по-долу търси съдържание, което започва с буквата „a“.

grep с каретна котва, съпоставяща само редове, започващи с буквата a

Филтрират се само редовете, които започват със символа. Редовете, които не съдържат символа „a“ в началото, се игнорират.

Нека разгледаме друг пример. Снимката на екрана по-долу отново показва съдържанието на примерния файл преди филтриране по края на реда.

Примерно съдържание на файла, показано преди филтриране на редове, завършващи с буквата t

Изберете само редовете, които завършват с буквата „t“, като използвате котвата „$“, както е показано по-долу.

grep с доларова котва, избирайки само редове, завършващи с буквата t

Интервал Регулярни изрази

Тези изрази определят броя на срещанията на даден символ в низ. Те са изброени по-долу.

Изразяване Descriptйон
{н} Съвпада с предходния знак, появяващ се 'n' пъти точно
{n,m} Съвпада с предходния знак, появяващ се 'n' пъти, но не повече от m
{n,} Съвпада с предходния знак само когато се появява 'n' пъти или повече

Например, филтрирайте всички редове, които съдържат символа „p“. Снимката на екрана по-долу показва съответстващите редове.

grep филтрира примерния файл за редове, съдържащи символа p

Сега проверете дали символът „p“ се появява точно два пъти в даден низ, един след друг. Синтаксисът за това е:

cat sample | grep -E p\{2}

Резултатът от интервалния мач е показан по-долу.

grep -E интервален израз, съответстващ на символа p, появяващ се точно два пъти

Забележка: Трябва да добавите -E с тези регулярни изрази.

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

Тези регулярни изрази комбинират повече от един израз. Някои от тях са:

Изразяване Descriptйон
\+ Съвпада с едно или повече появявания на предишния знак
\? Съвпада с нула или едно срещане на предишния знак

Например, търсете всички срещания на символа „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, регулярните изрази са чувствителни към главни и малки букви, така че главната буква и малката ѝ форма се третират като два различни знака.

Заместващите символи (глобиране) в Shell разширяват имената на файловете, където * означава произволни символи, а ? означава един символ. Регулярните изрази съответстват на текст във файловете, където * означава нула или повече от предходния символ. Едните и същи символи означават различни неща във всеки контекст.

Използвайте опцията -o, например grep -o „a\+t“ пример. Вместо да отпечатва целия ред, grep отпечатва само частта, която съответства на шаблона, по едно съвпадение на ред. Полезно е напримерtracстойности като имейли или номера.

Използвайте редуване със символа за вертикална черта. В разширен режим, grep -E “cat|dog” sample съвпада с редове, съдържащи cat или dog. В основен режим трябва да го екранирате като grep “cat\|dog” sample. Редуването позволява на една команда да търси няколко шаблона едновременно.

Асистентите с изкуствен интелект могат да превърнат описание на обикновен английски език в работещ регулярен израз, да обяснят какво прави даден загадъчен модел и да предложат решения, когато съвпадението не е успешно. Инструментите за машинно обучение също така откриват повтарящи се модели в големи лог файлове, които биха били досадни за писане на ръка.

Да. Копилот на GitHub предлага grep команди и регулярни изрази директно от коментар или частичен шаблон, докато пишете. Това ускорява писането на сложни изрази, въпреки че трябва да тествате всеки генериран шаблон спрямо реални примерни данни, преди да разчитате на него.

Обобщете тази публикация с: