grep

Merkkijonojen etsiminen tekstitiedostoista käyttämällä säännöllistä lauseketta sisältävää grep-tiedostoa

Merkkijonojen etsiminen tekstitiedostoista käyttämällä säännöllistä lauseketta sisältävää grep-tiedostoa
grep on yksi suosituimmista työkaluista merkkijonojen etsimiseen ja löytämiseen tekstitiedostosta. Nimi 'grep' saadaan komennosta, joka on vanhentuneessa Unix ed line editor -työkalussa - ed-komento etsinnälle maailmanlaajuisesti a: n tiedoston kautta tavallinen ilme ja sitten painaminen nuo linjat olivat g / re / s, missä re oli säännöllinen lauseke, jota käytit. Lopulta grep-komento kirjoitettiin tekemään tämä haku tiedostosta, kun et käytä ed.

Tässä artikkelissa näytämme sinulle suoritettavan merkkijonohaku Grepin avulla säännöllisen lausekkeen avulla antamalla sinulle 10 käytännön esimerkkiä sen toteutuksista. Monilla tässä artikkelissa käsitellyillä esimerkeillä on käytännön vaikutuksia, joten voit käyttää niitä päivittäisessä Linux-ohjelmoinnissasi. Seuraavat näytteet kuvaavat joitain regexp-esimerkkejä yleisesti haetuista malleista.

Esimerkki 1: Etsi yksi rahtaaja tekstitiedostosta

Jos haluat tulostaa tiedoston "kirja" rivejä, jotka sisältävät $ -merkin, kirjoita:

$ grep '\ $' kirja

Esimerkki 2: Etsi yksi merkkijono tekstitiedostosta

Rivien tuottamiseksi tiedostosta 'kirja', joka sisältää merkkijonon '$ 14.99 ', tyyppi:

$ grep '\ $ 14 \.99-kirja

Esimerkki 3: Etsi yksi yksittäinen vuokraaja tekstitiedostosta

Jos haluat tulostaa riviä tiedostossa "kirja", joka sisältää \ "-merkin, kirjoita:

$ grep '\\' kirja

Esim. 4: Tietyn tekstin alkuiset viivat

Käytä 'ˆ' -merkkiä regpeksissä merkitsemään rivin alku.

Jos haluat lähettää kaikki rivit hakemistossa '/ usr / dict / words', jotka alkavat sanalla 'pro', kirjoita:

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

Jos haluat tulostaa kaikki tiedoston "rivit" rivit, jotka alkavat tekstillä "alussa", kirjoita tapaus riippumatta:

$ grep -i 'alussa' -kirja

MERKINTÄ: Nämä regexksit lainattiin merkillä; tämä johtuu siitä, että jotkut kuoret käsittelevät muuten ˆ-merkkiä erityisenä "metakuvana"

Sana- ja lausehakujen lisäksi voit etsiä monimutkaisia ​​tekstimalleja, joita kutsutaan säännöllisiksi lausekkeiksi, grepillä. Säännöllinen lauseke tai “regexp” on erikoismerkkien merkkijono, joka määrittää a aseta sopivia malleja.

Teknisesti sanan tai lauseen mallit ovat säännöllisiä lausekkeita - vain hyvin yksinkertaisia. Säännöllisessä lausekkeessa useimmat merkit, mukaan lukien kirjaimet ja numerot, edustavat itseään. Esimerkiksi regexp-kuvio 1 vastaa merkkijonoa '1' ja kuviota poika vastaa merkkijonoa "poika".

On olemassa useita varattuja merkkejä, joita kutsutaan metahahmoiksi, jotka eivät edusta itseään säännöllisessä lausekkeessa, mutta niillä on erityinen merkitys, jota käytetään monimutkaisten kuvioiden rakentamiseen. Nämä metahahmot ovat seuraavat: ., *, [, ], ˆ, $ ja \. On hyvä huomata, että tällaiset metamerkit ovat yleisiä lähes kaikissa tavallisissa ja erityisissä Linux-jakeluissa. Tässä on hyvä artikkeli, joka kattaa metahahmojen erityiset merkitykset ja antaa esimerkkejä niiden käytöstä.

Esim. 5: Rivit, jotka päättyvät tiettyyn tekstiin

Käytä '$' lainatun tekstin viimeisenä merkkinä vastaamaan kyseistä tekstiä vain rivin lopussa. Jos haluat tulostaa rivejä huutomerkillä päättyviin tiedostoihin, kirjoita:

$ grep '!$ menee

Esim. 6: Tietyn pituiset viivat

Käytä tietyn pituisia viivoja vastaamaan.'characters: n ja $: n väliset merkit - esimerkiksi, jotta kaikki merkit (tai sarakkeet) leveät rivit sopivat yhteen, käytä hakulausekkeena tavallista sanaa' ˆ… $ '.

Jos haluat antaa kaikki rivit hakemistossa / usr / dict / words, jotka ovat täsmälleen kolmen merkin pituisia, kirjoita:

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

Pidemmillä viivoilla on hyödyllisempää käyttää erilaista rakennetta: 'ˆ.\ numero \ $ ', missä numero on vastaavien rivien määrä. Määritä numeroalue käyttämällä ','.

Jos haluat antaa kaikki rivit hakemistossa / usr / dict / words, jotka ovat täsmälleen kaksitoista merkkiä leveät, kirjoita:

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

Jos haluat tulostaa kaikki rivit hakemistossa / usr / dict / words, jotka ovat vähintään kaksikymmentäkaksi merkkiä leveitä, kirjoita:

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

Esim. 7: Vastaavat viivat, jotka sisältävät joitain regexps-sanoja

Määritä regexps-lukuja sisältävien rivien vastaamiseksi määritä kukin regexps hakeaksesi vuorotteluoperaattoreiden välillä ('\ |' '). Rivit, jotka sisältävät minkä tahansa annetusta regexpsistä, tulostetaan.

Jos haluat tulostaa kaikki playboy-rivit, jotka sisältävät joko kirjoja tai kakkuja, kirjoita:

$ grep 'kirja \ | kakku' playboy

Esim. 8: Vastaavat viivat, jotka sisältävät kaikki jotkut regexps

Vastaavien rivien tuottamiseksi kaikki useiden regexppien joukosta, käytä grep-tiedostoa riveille, jotka sisältävät ensimmäisen sovitettavan regexp: n, ja välitä lähtö grepiin toisen regexp-argumentin kanssa. Jatka putkien lisäämistä kaikkien etsittävien hakulausekkeiden hakemiseen.

Jos haluat lähettää kaikki rivit soittolistassa, joka sisältää sekä kuviot '' ranta '' että '' taivas '', kirjoita tapaus:

$ grep -i 'rannalla' soittolista | grep -i taivas

Ex 9: Vastaavia viivoja, jotka sisältävät vain tiettyjä merkkejä

Käytä vain tiettyjä merkkejä sisältäviä rivejä sovittamalla regexp 'ˆ [merkit] * $', missä merkit vastaavat.  Jos haluat antaa "/ usr / dict / words" -rivejä, jotka sisältävät vain vokaaleja, kirjoita:

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

'-I' -vaihtoehto vastaa merkkejä kirjaimista riippumatta; joten tässä esimerkissä kaikki vokaalimerkit sovitetaan tapauskohtaisesti.

Esim. 10: Lausekkeiden etsiminen välistä riippumatta

Yksi tapa etsiä ilmausta, joka saattaa esiintyä sanojen välissä tai rivin tai sivunvaihdon ylimääräisillä välilyönneillä, on poistaa kaikki rivinvaihdot ja ylimääräiset välilyönnit syötteestä ja napata sitten. Tee tämä syöttämällä tulo tr: ään argumentilla "\ r \ n: \> \ | -" argumenttiin '-d' (poistamalla kaikki rivinvaihdot syötteestä); putki se FMT-suodattimeen '-u' -vaihtoehdolla (tekstin tulostaminen tasaisella välillä); ja putki, että tartutaan etsittävän kuvion kanssa.

Jos haluat hakea merkkijonoa rivinvaihdoista samanaikaisesti tiedostossa 'docs', kirjoita:

$ kissaasiakirjat | tr -d '\ r \ n: \> \ |
-"| fmt -u | grep 'samaan aikaan kuin'

Yhteenveto

Tässä artikkelissa tarkasteltiin 10 käytännön esimerkkiä Grep Linux -komennon käyttämisestä merkkijonojen etsimiseen ja löytämiseen tekstitiedostosta. Matkan varrella opimme käyttämään säännöllisiä lausekkeita Grepin kanssa monimutkaisten hakujen tekemiseksi tekstitiedostoista. Tähän mennessä sinulla on parempi käsitys siitä, kuinka tehokkaat Linux-hakutoiminnot ovat.

Tässä on lisäresursseja niille, jotka ovat kiinnostuneita oppimaan lisää Linux-ohjelmoinnista:

Resurssit järjestelmänvalvojille

Resurssit Linux-ytimen ohjelmoijille

Linux-tiedostojärjestelmän sanakirja

Kattava katsaus Linux-tiedosto- ja hakemistojärjestelmän toimintaan

Parhaat komentorivipelit Linuxille
Komentorivi ei ole vain suurin liittolainen Linuxia käytettäessä - se voi olla myös viihteen lähde, koska voit käyttää sitä pelaamaan monia hauskoja p...
Parhaat Linux-peliohjaimen kartoitussovellukset
Jos haluat pelata pelejä Linuxissa peliohjaimella tyypillisen näppäimistön ja hiiren syöttöjärjestelmän sijaan, on sinulle hyödyllisiä sovelluksia. Mo...
Hyödyllisiä työkaluja Linux-pelaajille
Jos haluat pelata pelejä Linuxissa, on todennäköistä, että olet käyttänyt sovelluksia ja apuohjelmia, kuten Wine, Lutris ja OBS Studio, pelikokemuksen...