GNU/Linux >> Znalost Linux >  >> Linux

Představení regulárních výrazů

Všichni jsme používali globování souborů se zástupnými znaky jako * a ? jako prostředek k výběru konkrétních souborů nebo řádků dat z datového toku. Tyto nástroje jsou výkonné a používám je mnohokrát denně. Přesto jsou věci, které se zástupnými znaky dělat nedají.

Regulární výrazy (regexy nebo RE) nám poskytují složitější a flexibilnější vzor

odpovídající schopnosti. Stejně jako určité znaky nabývají zvláštního významu při použití globbingu souborů, mají také RE speciální znaky. Existují dva hlavní typy regulárních výrazů (RE), základní regulární výrazy (BRE) a rozšířené regulární výrazy (ERE).

První věc, kterou potřebujeme, jsou nějaké definice. Pro výraz regulární výrazy existuje mnoho definic , ale mnohé jsou suché a neinformativní. Tady jsou moje.

Regulární výrazy jsou řetězce literálů a metaznaků, které mohou různé linuxové nástroje použít jako vzory ke spárování řetězců dat ve formátu prostého textu ASCII v datovém toku. Když dojde ke shodě, lze ji použít k extrahování nebo odstranění řádku dat ze streamu nebo k nějaké úpravě shodného řetězce.

Základní regulární výrazy (BRE) a rozšířené regulární výrazy (ERE) se z hlediska funkčnosti výrazně neliší. (Viz část 3.6 informační stránky grep, "Základní vs. Rozšířené regulární výrazy.") Primární rozdíl je v použité syntaxi a ve způsobu zadávání metaznaků. V základních regulárních výrazech jsou to metaznaky ? , + , { , | , ( a ) ztrácejí svůj zvláštní význam. Místo toho je nutné použít verze se zpětným lomítkem:\? , \+ , \{ , \| , \( a \) . Mnoho lidí věří, že syntaxe ERE se snáze používá.

Poznámka: Když mluvím o regulárních výrazech, v obecném smyslu mám obvykle na mysli zahrnout základní i rozšířené regulární výrazy. Pokud je třeba provést diferenciaci, použiji zkratky BRE pro základní regulární výrazy nebo ERE pro rozšířené regulární výrazy.

Regulární výrazy (RE) posouvají koncept používání metaznaků ke spárování vzorů v datových tocích mnohem dále než globování souborů a dávají nám ještě větší kontrolu nad položkami, které vybíráme z datového toku. RE používají různé nástroje k analyzování datový proud, který odpovídá vzorům znaků za účelem provedení určité transformace dat.

Poznámka: Jedním z obecných významů analýzy je zkoumat něco studiem jeho součástí. Pro naše účely analyzujeme datový tok, abychom našli sekvence znaků, které odpovídají zadanému vzoru.

Regulární výrazy mají pověst obskurních a tajemných zaříkadel, která používají pouze ti, kteří mají speciální kouzelnické schopnosti systémového správce. Zdá se, že tento jediný řádek kódu níže (který jsem použil k transformaci souboru, který mi byl zaslán do použitelné podoby) to potvrzuje:

$ cat Experiment_6-1.txt | grep -v Team | grep -v "^\s*$" | sed -e "s/[Ll]eader//" -e "s/\[//g" -e "s/\]//g" -e "s/)//g" | awk '{print $1" "$2" <"$3">"}' > addresses.txt

Tento příkazový kanál se zdá být neřešitelným sledem nesmyslných blábolů pro kohokoli bez znalosti regulárního výrazu. Rozhodně mi to tak připadalo, když jsem se s něčím podobným setkal na začátku své kariéry. Jak uvidíte, regulární výrazy jsou relativně jednoduché, jakmile jsou vysvětleny.

Všech možností, které nám regulární výrazy otevírají, se můžeme začít dotknout pouze v jediném článku (i v jediné sérii). Existují celé knihy věnované výhradně regulárním výrazům, takže základy prozkoumáme v sérii článků zde o Enable Sysadmin během nadcházejícího týdne. Na konci budete vědět jen tolik, abyste mohli začít s úkoly společnými pro systémové správce. Doufejme, že poté budete mít chuť se sami dozvědět více.

Poznámka: Tento článek je mírně upravenou verzí kapitoly 6 z 2. dílu mé knihy o Linuxu, Používání a správa Linuxu:Zero to SysAdmin, která má vyjít na Apress koncem roku 2019.


Linux
  1. 6 nejlepších nástrojů CLI pro vyhledávání dat ve formátu prostého textu pomocí regulárních výrazů

  2. Začínáme s regulárními výrazy:Příklad

  3. Představení regulárních výrazů

  1. Jak se regulární výrazy liší od zástupných znaků používaných k filtrování souborů?

  2. Definice regulárního výrazu?

  3. Není \d podporováno základními výrazy grepu?

  1. Představujeme Groff Macros cheat sheet

  2. Proč `\d` nefunguje v regulárních výrazech v sed?

  3. Vyhodnoťte výrazy ve Vimu