grep

Nájdenie reťazcov v textových súboroch pomocou výrazu grep s regulárnym výrazom

Nájdenie reťazcov v textových súboroch pomocou výrazu grep s regulárnym výrazom
grep je jedným z najpopulárnejších nástrojov na vyhľadávanie a hľadanie reťazcov v textovom súbore. Názov „grep“ je odvodený od príkazu v dnes už zastaranom nástroji editora riadkov Unix ed - príkaz ed na vyhľadávanie globálne prostredníctvom súboru pre a regulárny výraz a potom tlač tie riadky boli g / re / p, kde re bol regulárny výraz, ktorý by ste použili. Nakoniec bol napísaný príkaz grep, ktorý robí toto vyhľadávanie v súbore, keď nepoužívate ed.

V tomto článku vám ukážeme, ako spustiť pokročilé vyhľadávanie reťazcov pomocou funkcie Grep s regulárnym výrazom, a poskytneme vám 10 praktických príkladov jeho implementácií. Mnoho príkladov diskutovaných v tomto článku má praktické dôsledky, čo znamená, že ich môžete použiť pri každodennom programovaní systému Linux. Nasledujúce ukážky popisujú niektoré príklady regulárnych výrazov pre bežne vyhľadávané vzory.

Pr. 1: Vyhľadanie jedinej charterovej organizácie v textovom súbore

Ak chcete vypísať riadky v súbore „kniha“, ktoré obsahujú znak „$“, zadajte:

$ grep '\ $' kniha

Príklad 2: Nájdite jeden reťazec v textovom súbore

Na výstup riadkov v súbore „kniha“, ktorý obsahuje reťazec „14 dolárov.99 ', typ:

$ grep '\ $ 14 \.99 'kniha

Pr. 3: Nájdite jediného špeciálneho charteru v textovom súbore

Ak chcete vypísať riadky v súbore „kniha“, ktoré obsahujú znak „\“, zadajte:

$ grep '\\' kniha

Pr. 4: Zhodné riadky začínajúce určitým textom

Na označenie začiatku riadku použite znak „ˆ“ v regulárnom výraze.

Ak chcete zobraziť všetky riadky v adresári „/ usr / dict / words“ začínajúce znakom „pro“, zadajte:

$ grep 'ˆpro' / usr / dict / slová

Ak chcete vypísať všetky riadky v súbore „kniha“, ktoré začínajú textom „na začiatku“, bez ohľadu na veľkosť písmen, zadajte:

$ grep -i Kniha „beginningna začiatku“

POZNÁMKA: Tieto regulárne výrazy boli označené znakmi; je to preto, lebo niektoré mušle inak považujú znak „ˆ“ za špeciálny „metaznak“

Okrem vyhľadávania slov a fráz môžete pomocou grepu vyhľadávať zložité textové vzory nazývané regulárne výrazy. Regulárny výraz - alebo „regexp“ - je textový reťazec špeciálnych znakov, ktorý určuje a nastaviť vzorov, ktoré sa majú zhodovať.

Technicky vzaté, vzory slov alebo fráz sú regulárne výrazy - len veľmi jednoduché. V regulárnom výraze sa väčšina znakov vrátane písmen a číslic predstavuje sama. Napríklad vzor regexp 1 zodpovedá reťazcu „1“ a vzoru chlapec zodpovedá reťazcu „chlapec“.

Existuje niekoľko vyhradených znakov nazývaných metaznaky, ktoré sa v regulárnom výraze nereprezentujú, ale majú špeciálny význam, ktorý sa používa na vytvorenie zložitých vzorov. Ide o tieto metaznaky: ., *, [, ], ˆ, $ a \. Je dobré poznamenať, že takéto metaznaky sú bežné takmer vo všetkých bežných a špeciálnych distribúciách Linuxu. Tu je dobrý článok, ktorý pokrýva špeciálne významy metaznakov a uvádza príklady ich použitia.

Pr. 5: Zhodné riadky končiace určitým textom

Použite znak „$“ ako posledný znak citovaného textu, aby sa text zhodoval iba na konci riadku. Ak chcete vypísať riadky v súbore, končiace výkričníkom, zadajte:

$ grep '!$ 'ide

Pr. 6: Zhodné čiary určitej dĺžky

Ak chcete zladiť riadky určitej dĺžky, použite počet znakov '.„znaky medzi„ ˆ “a„ $ “- napríklad na zhodu všetkých riadkov, ktoré sú široké dva znaky (alebo stĺpce), použite„ ˆ… $ “ako regexp na vyhľadanie.

Ak chcete vygenerovať všetky riadky v adresári „/ usr / dict / words“, ktoré majú presne tri znaky, zadajte:

$ grep 'ˆ ... $' / usr / dict / slová

Pre dlhšie čiary je užitočnejšie použiť iný konštrukt: 'ˆ.\ number \ $ ', kde number je počet riadkov, ktoré sa majú zhodovať. Pomocou znakov „,“ zadajte rozsah čísel.

Ak chcete zobraziť všetky riadky v adresári „/ usr / dict / words“, ktoré majú šírku presne dvanástich znakov, zadajte:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / slová

Ak chcete vygenerovať všetky riadky v priečinku „/ usr / dict / words“, ktorých šírka je dvadsaťdva alebo viac znakov, zadajte:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / slová

Príklad 7: Zhodné riadky, ktoré obsahujú niektorý z niektorých regulárnych výrazov

Ak chcete priradiť riadky, ktoré obsahujú ľubovoľný počet regulárnych výrazov, zadajte každý z výrazov, ktoré sa majú vyhľadávať medzi operátormi striedania ('\ |'), ako hľadaný výraz. Na výstupe budú riadky obsahujúce ktorýkoľvek z daných regulárnych výrazov.

Ak chcete do súboru „playboy“, ktorý obsahuje vzory „kniha“ alebo „torta“, vypísať všetky riadky, zadajte:

$ grep 'kniha \ koláč' playboy

Pr. 8: Zhodné riadky, ktoré obsahujú všetky niektoré regulárne výrazy

Na výstup zodpovedajúcich riadkov všetko z množstva regexps, použite grep na výstup riadkov obsahujúcich prvý regexp, ktorý chcete nájsť, a výstup potrubia na grep s druhým regexp ako argument. Pokračujte v pridávaní rúrok do grepových vyhľadávaní všetkých regulárnych výrazov, ktoré chcete vyhľadať.

Ak chcete vypísať všetky riadky v zozname skladieb, ktorý obsahuje vzory „pobrežie“ aj „obloha“, bez ohľadu na prípad, zadajte:

$ grep -i Zoznam skladieb 'the shore' grep -i obloha

Pr. 9: Zhodné riadky, ktoré obsahujú iba určité znaky

Ak chcete priradiť riadky, ktoré obsahujú iba určité znaky, použite regulárny výraz „ˆ [znaky] * $“, kde sa zhodujú znaky.  Ak chcete vygenerovať riadky v adresári „/ usr / dict / words“, ktoré obsahujú iba samohlásky, zadajte:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / slová

Voľba „-i“ sa zhoduje so znakmi bez ohľadu na veľkosť písmen; takže v tomto príklade sa všetky znaky samohlásky zhodujú bez ohľadu na veľkosť písmen.

Pr. 10: Hľadanie fráz bez ohľadu na medzery

Jedným zo spôsobov, ako vyhľadať frázu, ktorá sa môže vyskytnúť s medzerami medzi slovami alebo cez koniec riadku alebo stránky, je odstránenie všetkých riadkov a ďalších medzier zo vstupu a následné grepovanie. Za týmto účelom vložte kanál do tr s argumentom „\ r \ n: \> \ | -“ na voľbu „-d“ (odstránenie všetkých zalomení riadkov zo vstupu); prepojiť to s filtrom fmt s voľbou '-u' (výstup textu s rovnomerným rozstupom); a potrubie, ktoré má grep so vzorom hľadať.

Ak chcete hľadať v zlome riadkov reťazec „súčasne“ v súbore „docs“, zadajte:

$ mačka dokumenty | tr -d '\ r \ n: \> \ |
-"| fmt -u | grep „súčasne“

Zhrnutie

V tomto článku sme preskúmali 10 praktických príkladov použitia príkazu Grep Linux na vyhľadávanie a hľadanie reťazcov v textovom súbore. Počas toho sme sa naučili, ako používať regulárne výrazy v spojení s Grepom na vykonávanie komplexného vyhľadávania v textových súboroch. Teraz už máte lepšiu predstavu o tom, aké výkonné sú funkcie vyhľadávania systému Linux.

Tu sú ďalšie zdroje pre záujemcov, ktorí sa chcú dozvedieť viac o programovaní v systéme Linux:

Zdroje pre správcov systému

Zdroje pre programátorov jadra systému Linux

Slovník súborových systémov Linux

Komplexná kontrola fungovania súborového a adresárového systému Linux

Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...
Ako zmeniť veľkosť, farbu a schému ukazovateľa myši a kurzora v systéme Windows 10
Ukazovateľ myši a kurzor vo Windows 10 sú veľmi dôležité aspekty operačného systému. Dá sa to povedať aj pre iné operačné systémy, takže v skutočnosti...
Hry Zadarmo a open source herné motory pre vývoj hier pre Linux
Zadarmo a open source herné motory pre vývoj hier pre Linux
Tento článok sa bude zaoberať zoznamom bezplatných a otvorených herných nástrojov, ktoré možno použiť na vývoj 2D a 3D hier v systéme Linux. Existuje ...