grep

Iskanje nizov v besedilnih datotekah z uporabo grep z regularnim izrazom

Iskanje nizov v besedilnih datotekah z uporabo grep z regularnim izrazom
grep je eno izmed najbolj priljubljenih orodij za iskanje in iskanje nizov v besedilni datoteki. Ime 'grep' izhaja iz ukaza v zdaj zastarelem orodju za urejanje vrstic Unix ed - ukaz ed za iskanje globalno skozi datoteko za vsakdanje izražanje in potem tiskanje te vrstice je bilo g / ponovno / str, kjer je bil regularni izraz, ki bi ga uporabili. Sčasoma je bil napisan ukaz grep, ki je iskal datoteko, kadar ni uporabil ed.

V tem članku vam pokažemo, kako zagnati vnaprejšnje iskanje nizov z uporabo Grepa z regularnim izrazom, tako da vam predstavimo 10 praktičnih primerov njegovih izvedb. Številni primeri, obravnavani v tem članku, imajo praktične posledice, kar pomeni, da jih lahko uporabite pri vsakodnevnem programiranju Linuxa. Naslednji vzorci opisujejo nekaj primerov regularnih izrazov za pogosto iskane vzorce.

Primer 1: Poiščite enega zakupnika v besedilni datoteki

Če želite v datoteko 'book' izpisati vrstice, ki vsebujejo znak '$', vnesite:

$ grep '\ $' knjiga

2. primer: v besedilni datoteki poiščite en niz

Za izpis vrstic v datoteki 'book', ki vsebuje niz '$ 14.99 ', tip:

$ grep '\ $ 14 \.99 'knjiga

Primer 3: V besedilni datoteki poiščite enega posebnega zakupnika

Če želite v datoteko 'book' izpisati vrstice, ki vsebujejo znak '\', vnesite:

$ grep '\\' knjiga

Primer 4: Ujemanje vrstic, ki se začnejo z določenim besedilom

Uporabite 'ˆ' v regularnem izrazu, da označite začetek vrstice.

Za izpis vseh vrstic v '/ usr / dict / words', ki se začnejo s 'pro', vnesite:

$ grep 'ˆpro' / usr / dict / words

Če želite izpisati vse vrstice v datoteki 'knjiga', ki se začnejo z besedilom "na začetku", ne glede na veliko črko vnesite:

$ grep -i 'v začetku' knjiga

OPOMBA: Ti regularni izrazi so bili citirani z znaki '; to je zato, ker nekatere lupine drugače obravnavajo znak 'ˆ' kot poseben "metaznak"

Poleg iskanja besed in besednih zvez lahko z grepom iščete tudi zapletene vzorce besedila, imenovane regularni izrazi. Regularni izraz - ali "regularni izraz" - je besedilni niz posebnih znakov, ki določa nastavite vzorcev, ki se ujemajo.

Tehnično gledano so vzorci besed ali besednih zvez regularni izrazi - le zelo preprosti. V regularnem izrazu se večina znakov, vključno s črkami in številkami, predstavlja sama. Na primer vzorec regularnega izraza 1 se ujema z nizom '1' in vzorcem fant se ujema z nizom "fant".

Obstaja več rezerviranih znakov, imenovanih metaznaki, ki se ne predstavljajo v regularnem izrazu, imajo pa poseben pomen, ki se uporablja za gradnjo zapletenih vzorcev. Ti metaznaki so naslednji: ., *, [, ], ˆ, $ in \. Dobro je omeniti, da so takšni metaznaki pogosti med skoraj vsemi običajnimi in posebnimi distribucijami Linuxa. Tu je dober članek, ki zajema posebne pomene metaznakov in daje primere njihove uporabe.

Primer 5: Ujemanje vrstic, ki se končajo z določenim besedilom

Kot zadnji znak citiranega besedila uporabite '$', da se besedilo ujema samo na koncu vrstice. Če želite v datoteko, ki se konča s klicajem, izpisati vrstice, vnesite:

$ grep '!$ 'gre

Primer 6: Ujemajoče se črte določene dolžine

Če želite ujemati črte določene dolžine, uporabite to število.'znaki med' ˆ 'in' $ '- na primer, če se želite ujemati z vsemi vrsticami, ki so široke dva znaka (ali stolpca), uporabite "ˆ ... $" kot regularni izraz za iskanje.

Za izpis vseh vrstic v '/ usr / dict / words', ki so široke natančno tri znake, vnesite:

$ grep 'ˆ… $' / usr / dict / words

Za daljše vrstice je koristneje uporabiti drugačno konstrukcijo: 'ˆ.\ število \ $ ', kjer je število število vrstic, ki se ujemajo. Uporabite ',' za določitev obsega številk.

Za izpis vseh vrstic v '/ usr / dict / words', ki so široke natanko dvanajst znakov, vnesite:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / words

Za izpis vseh vrstic v '/ usr / dict / words', ki so široke dvaindvajset ali več znakov, vnesite:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Primer 7: Ujemajoče se vrstice, ki vsebujejo katerega koli od regularnih izrazov

Če želite ujemati vrstice, ki vsebujejo katerega koli od številnih regularnih izrazov, podajte vsakega od regularnih izrazov, ki jih želite iskati med operaterji izmeničenja ('\ |'), kot regularni izraz za iskanje. Izpisale se bodo vrstice, ki vsebujejo katerega koli od danih regularnih izrazov.

Za izpis vseh vrstic v 'playboy', ki vsebuje bodisi vzorce 'knjiga' ali 'torta', vnesite:

$ grep 'the book \ | cake' playboy

Primer 8: Ujemajoče se vrstice, ki vsebujejo vse nekatere regularne izraze

Za izpis vrstic, ki se ujemajo vse številnih regularnih izrazov uporabite grep za izhodne vrstice, ki vsebujejo prvi regularni izraz, s katerim se želite ujemati, in izhod podajte v grep z drugim regularnim izrazom kot argumentom. Nadaljujte z dodajanjem cevi za iskanje z grep-om za vse regularne izraze, ki jih želite iskati.

Za izpis vseh vrstic na 'seznam predvajanja', ki vsebuje oba vzorca 'obala' in 'nebo', vnesite:

$ grep -i 'the shore' seznam predvajanja | grep -i nebo

Primer 9: Ujemanje vrstic, ki vsebujejo samo določene znake

Če želite ujemati vrstice, ki vsebujejo samo določene znake, uporabite regularni izraz 'ˆ [znaki] * $', kjer se znaki ujemajo.  Za izpis vrstic v '/ usr / dict / words', ki vsebujejo samo samoglasnike, vnesite:

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

Možnost '-i' se ujema z znaki ne glede na velike in male črke; v tem primeru se torej ujemajo vsi znaki samoglasnikov, ne glede na velike in male črke.

Primer 10: Iskanje besednih zvez ne glede na razmike

Eden od načinov iskanja besedne zveze, ki bi se lahko pojavila z dodatnimi presledki med besedami ali prek preloma vrstice ali strani, je odstraniti vse podajalnike vrstic in odvečne presledke iz vnosa in nato zapisati. Če želite to narediti, vstavite vhod v tr z "\ r \ n: \> \ | -" kot argument možnosti '-d' (odstranitev vseh prelomov vrstic iz vhoda); napeljite to do fmt filtra z možnostjo '-u' (izpis besedila z enakomernim razmikom); in cev, ki naj grep z vzorcem za iskanje.

Če želite iskati niz po vrsticah med vrsticami hkrati z 'v datoteki' docs ', vnesite:

$ mačka dokumenti | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'istočasno kot'

Povzetek

V tem članku smo pregledali 10 praktičnih primerov uporabe ukaza Grep Linux za iskanje in iskanje nizov v besedilni datoteki. Med potjo smo se naučili, kako uporabljati regularne izraze skupaj z Grepom za zapleteno iskanje besedilnih datotek. Zdaj že imate boljše predstave o tem, kako zmogljive so funkcije iskanja za Linux.

Tu so dodatni viri za tiste, ki jih zanima več o programiranju Linuxa:

Viri za sistemske skrbnike

Viri za programerje jedra Linuxa

Slovar datotečnega sistema Linux

Izčrpen pregled delovanja sistema datotek in imenikov Linux

Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...
Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...
Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...