Регулярни изрази и Впиши команда

10.4 <> - съвпадение елемент определения брой пъти

Как да използвате регулярни изрази

данни Текстови играят важна роля във всички Unix-подобни системи като Linux. Наред с другите неща, текстът е заключението на конзолните програми и конфигурационни файлове, доклади и т.н. Регулярните изрази са (най-вероятно) един от най-трудните концепции за работа с текст, тъй като включва високо ниво на абстракция. Но времето, прекарано на тяхното проучване, ще бъдат компенсирани. Знаейки как да използвате регулярни изрази, можете да направите невероятни неща, въпреки че общата им стойност не може да бъде непосредствено очевидна.

В тази статия ще разгледаме използването на регулярни изрази с командата Впиши. Но тяхното използване не се ограничава до: най-често използвани изрази, поддържани от други Linux команди, много езици за програмиране се използват за конфигурация (например, при определяне на правилата на mod_rewrite в Apache), както и някои GUI програми ви позволяват да зададете правила за търсене / копиране / изтриване на подкрепа за регулярни изрази.

Какви са регулярните изрази?

По-просто казано, регулярният израз - символ, символично нотация модел, който се търси в текста. Регулярните изрази са подкрепени от редица инструменти за командния ред, както и по-голямата част от езици за програмиране и се използват за да се улесни решаването на проблеми с текст манипулация. Въпреки това, (ако е малко за нас от тяхната сложност), не всички регулярни изрази са едни и същи. Те се различават леко от инструмент за инструмент, и езика за програмиране на езика. За нашата дискусия, ние се ограничаваме до регулярни изрази, описани в стандарта POSIX (което ще обхване по-голямата част инструменти за командния ред), за разлика от много програмни езици (предимно на Perl), които използват по-големи малко и по-богати набори от означения.

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

Впиши да направите търсене в текста получен на стандартния вход, като например:

Регулярни изрази и Впиши команда

Тази команда ще направи списък с файловете в директорията / ЮЕсАр / хамбар, чието име съдържа подниз «цип».

Впиши програма може да търсите текст във файлове.

Споделено синтаксис употреба:

  • регулярен - регулярния израз.
  • [File ...] - един или повече файлове, които искате да търсите за регулярен израз.

[Опции] и [...] файл може да не са налични.

Списък на най-често използваните опции Впиши:

Символите, използвани да експресират шестнадесетичен номера. В ASCII ekvivaletno: [0-9a-Фа-е]

В тези изрази, квадратни скоби и колони са част от символ за запис (граници) на класа.

Внимание: В зависимост от настройките на локала, [: alnum:]. [: Word:]. [: Алфа:] и други диапазони могат да включват букви, си азбука, например звънец. Т.е. [: Алфа:] може да съответства не [A-Za-Z]. и [A-Za-Za-Ha-I].

Basic (Основен) и разширени (Разширени) регулярни изрази

Има два вида на регулярни изрази: Основни регулярни изрази (основни регулярни изрази (BRE)) и разширени регулярни изрази (разширени регулярни изрази (ERE)). Ние имаме предвид възможността за всяко приложение се поддържат от POSIX съвместими и имат реализацията на BRE. Една такава програма е нашата Впиши.

Каква е разликата BRE и ERE? Работата е там метасимвола. Следващите метасимволите признати BRE:

Всички други знаци, се третират като литерали. Следващите мета-герои (и свързаните с него функции), добавени към ère:

Въпреки това (и това е смешно част), героите "(", ")", "" и ">" в метасимволите BRE се третират като избягал с наклонена черта; докато в ERE метасимвола изявление преди наклонена черта води до факта, че те се третират като литерали.

Тъй като функциите, които ние ще продължим да се разгледа, са част от ERE (разширени регулярни изрази), ние трябва да използвате друг Впиши. Традиционно, той стартира egrep програма. но сега това не се препоръчва да се използва, вместо това трябва да използвате GNU Впиши версия, която също поддържа разширени регулярни изрази с помощта на опцията за -Е.

алтернативи

Първата функция на разширени регулярни изрази, които ние ще обсъдим се нарича алтернативата, която е една възможност, която ви позволява да търсите за съответния запис от снимачната площадка на изрази. Като израз в скоби позволяват един знак мач на определен набор от знаци, възможности позволяват на съвпадение на набор от линии или други регулярни изрази.

За да се докаже, ние ще използваме Впиши в двойка с ехо. За да започнете, нека се опитаме да се провери съответствието на обикновен стар Онлайн:

Един много прост пример, който минахме през тръбата на изхода на ехо да Впиши и да погледнем в резултата. Когато един мач, а след това се отпечатва на стандартния изход; Ако не се открият един мач, то не се показва резултат.

Сега ние добавяме алтернативата, изразена като маска вертикална лента:

Тук ние виждаме регулярния израз "AAA | BBB ', което означава' линия или ред или ред AAA BBB». Моля, имайте предвид, че тъй като това е разширена функция сме добавили към Впиши -Е опция (избирайки вместо това да бъде в състояние да използва проста програма egrep, но това не се препоръчва - egrep команда вече е остаряло). Повече, ние имаме сключен регулярния израз в кавички, за да се предотврати тълкуването на Basham вертикална линия като оператор на тръба (тръба). Алтернативи не се ограничават до две възможности:

За да се съчетаят алтернативите с други елементи на регулярни изрази, можем да използваме () за отделни алтернативи:

Регулярни изрази и Впиши команда

Този израз ще съвпада с имената на файловете в нашия списък, които започват или с «BZ», «GZ» или «цип». Ако премахнем скобите от нашия регулярен израз:

Регулярни изрази и Впиши команда

След това стойността му се променя, а сега тя ще отговаря на всякакви името на файла започва с «BZ» или съдържащи «GZ» или съдържащи «цип».

Разширени регулярни изрази подкрепа няколко начина за определяне на броя на същия елемент.

. - нула елемент съвпадение или веднъж

  • където «н» - този номер. Ние можем да се изгради постоянен израз като този:

В този израз сме си поставили за героите скоби въпросителни знаци, за да покаже, че те трябва да се появят нула или едно и също време. Отново, защото скобите са обикновено метасимвола (в ERE), пред тях, ние поставяме обратно наклонени черти, чрез които те са третирани като литерали.

Нека се опитаме това:

* - Съвпадение три точки или повече пъти

Като маска ?. * Се използва за обозначаване на допълнителен елемент; Въпреки това, за разлика от ?. елемент може да настъпи неограничен брой пъти, не само odinozhdy. Да кажем, че искаме да видим дали низ е предложението; Така че, ако тя започва с главна буква, а след това тя съдържа произволен брой големи и малки букви, интервали, и завършва с точка. За да се съобразят с настоящата (много грубо) определението на предложение, трябва да използвате регулярен израз по този начин:

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

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

+ - съвпадение елемент един или повече пъти

+ Метасимволът работи много подобен на *. В допълнение, той изисква най-малко един екземпляр от предходния елемент, за да доведе до съвпадение. Това регулярен израз ще съвпадне само линиите, състоящ се от групи от един или повече буквени знаци, разделени с един интервал:

Виждаме, че този израз не съвпада с низа "а б 9", тъй като съдържа не-буквен знак; и не отговаря на "ABC г", тъй като код "С" и «г» разделени от повече от един знак за интервал.

<> - съвпадение елемент определения брой пъти

Метасимволи и> са използвани за изразяване на минималния и максималния брой на необходимите мачове. Те могат да бъдат определени в четири различни начина: