Kuinka käyttää fgrep-komentoa tekstimerkkijonojen etsimiseen tiedostoista
Lyhyesti: Tässä aloittelijaystävällisessä oppaassa käsittelemme käytännön esimerkkejä fgrep-komennosta. Tämän oppaan loppuun mennessä käyttäjät voivat suorittaa tekstihakutoimintoja tehokkaasti komentorivikäyttöliittymän avulla.
Tekstihaku on yksi yleisimmin suoritetuista toiminnoista. Tästä yksinkertaisesta tehtävästä tulee kuitenkin nopeasti aikaa vievä, jos käyttäjät eivät tunne oikeita työkaluja. Linuxissa on erilaisia tekstinsuodatusapuohjelmia, kuten awk, sed, cut jne.
Linuxissa fgrep on kuitenkin suosituin apuohjelma yksinkertaiseen tekstihakuun. Tässä oppaassa käsittelemme joitain käytännön esimerkkejä fgrep-komennosta, jota voidaan käyttää jokapäiväisessä elämässä.
fgrep-komento Linuxissa kuuluu grep-komennon perheeseen. Sitä käytetään kuitenkin etsimään kiinteää merkkijonomallia säännöllisten lausekkeiden sijaan. Tästä syystä komennon nimi on fgrep (Korjattu GREP).
fgrep-komennon syntaksi on samanlainen kuin muiden grep-perheen komentojen:
fgrep [OPTIONS] PATTERNS [FILES]
Aluksi luodaan pelkkä tekstitiedosto, jossa on seuraava sisältö esimerkkiä varten:
cat input.txt
Täällä näemme, että tekstitiedosto on valmis näytesisällön kanssa. Tarkastellaan nyt muutamissa seuraavissa esimerkeissä joitain yleisiä esimerkkejä fgrep-komennosta.
1. Miten fgrep eroaa komennoista grep ja egrep?
Kuten nimestä voi päätellä, fgrep-komentoa käytetään kiinteiden merkkijonomallien etsimiseen. Se tulkitsee kuvion kiinteäksi merkkijonoksi säännöllisen lausekkeen sijaan. Siksi se suorittaa hakutoiminnon aikaa säästävällä tavalla.
Ymmärtääksesi eron, käytetään pistemerkkiä (.)
grep-komennon kanssa.
Tämä yksinkertainen säännöllinen lauseke vastaa mitä tahansa yksittäistä merkkiä paitsi rivin loppua:
grep ha. input.txt
Yllä olevassa tulosteessa voimme nähdä, että pistemerkki (.)
vastasi tekstejä har, hat ja has vahva>.
Käytetään nyt samaa mallia fgrep-komennon kanssa ja tarkkaillaan tulosta:
fgrep ha. input.txt
Yllä olevassa lähdössä voimme nähdä, että komento ei löydä annettua mallia.
Tämä johtuu siitä, että fgrep-komento ei tunnista säännöllisiä lausekkeita ja yrittää etsiä ei-olemassa olevaa mallia - "ha. ”
.
2. Kuvion etsiminen tiedostosta
Aloitetaan perusesimerkistä, jossa etsimme merkkijonoammattilaista input.txt-tiedostosta:
fgrep professionals input.txt
Kuten näemme, kuvion sovitus onnistuu kahdessa paikassa ja se on korostettu punaisella värillä.
3. Grep-tulostusvärin asettaminen yhteensopiville kuvioille
Edellisessä esimerkissä näimme, että oletusarvoisesti vastaava kuvio on korostettu punaisella värillä. Voimme kuitenkin muuttaa tätä käyttäytymistä antamalla eri arvon GREP_COLOR
-ympäristömuuttujille.
Määritetään arvo 32 ympäristömuuttujalle GREP_COLOR
korostamaan vastaava kuvio vihreällä värillä:
export GREP_COLOR=32
fgrep professionals input.txt
Ennen kuin siirryt seuraavaan esimerkkiin, poista GREP_COLOR-ympäristömuuttujan asetukset ottaaksesi oletustoiminnan käyttöön:
unset GREP_COLOR
4. Kuinka etsiä useita kuvioita tiedostosta
Joskus meidän on suoritettava kuvioiden sovitus useille merkkijonoille. Tällaisissa tapauksissa voimme tarjota mallit tekstitiedostosta komentoriviargumentin sijaan.
Luodaan tekstitiedosto, joka sisältää useita kuvioita erillisellä rivillä:
cat pattern.txt
professionals
website
Käytetään nyt tätä tiedostoa -f
-vaihtoehdon kanssa useiden kuvioiden yhteensovittamiseen:
fgrep -f pattern.txt input.txt
Yllä olevasta tulosteesta voimme nähdä, että kuvioiden vastaavuus onnistuu merkkijonoissa ammattilaiset ja verkkosivusto.
5. Tiedoston osumien määrän rajoittaminen
Oletusarvon mukaan fgrep-komento jatkaa mallin sovittamista, kunnes koko tiedosto on käsitelty.
Joskus meidän on kuitenkin rajoitettava otteluiden määrää. Tällaisissa tapauksissa voimme käyttää vaihtoehtoa -m
komennon kanssa:
fgrep -m 1 professionals input.txt
TecMint was started on 15th August 2012 by technical professionals and all the
Tässä esimerkissä fgrep-komento pysäyttää tiedoston käsittelyn ensimmäisen kuvion täsmäämisen jälkeen.
6. Tiedoston nimen tulostaminen kuviota haettaessa
Joskus meidän on vain löydettävä niiden tiedostojen nimet, joissa tietty kuvio on läsnä. Tällaisissa tapauksissa voimme käyttää fgrep-komennon -l
-vaihtoehtoa:
fgrep -l professionals input.txt
input.txt
Täällä voimme nähdä, että komento tulostaa vain tiedoston nimen vastaavien kuvioiden rivien sijaan.
7. Tiedostonimen tulostaminen, kun kuvioiden täsmäys epäonnistuu
Edellisessä esimerkissä näimme, kuinka tiedoston nimi tulostetaan, kun kuvioiden täsmäys onnistuu. Katsotaanpa nyt, kuinka toimenpide suoritetaan käänteisellä tavalla.
Yritetään löytää tiedostosta ei-olemassa oleva kuvio ja tarkkailla tulosta:
fgrep -L non-existing-word input.txt
input.txt
Tässä esimerkissä käytimme komennon -L
-vaihtoehtoa, joka tulostaa tiedostonimen, kun kuvioiden täsmääminen ei onnistu.
8. Virheilmoitusten estäminen
Virheenkäsittelyllä on ratkaiseva rooli komentosarjoja kirjoitettaessa. Joissakin ei-kriittisissä skenaarioissa voimme kuitenkin jättää virheilmoitukset huomiotta.
fgrepissä voimme käyttää -s
-vaihtoehtoa, joka estää virheet, jotka liittyvät ei-olemassa oleviin tai lukukelvottomiin tiedostoihin. Ymmärtääksesi tämän käyttäytymisen paremmin, yritetään etsiä kuviota ei-olemassa olevasta tiedostosta:
fgrep -s professionals non-existing-file.txt
echo $?
2
Yllä olevassa lähdössä voimme nähdä, että komento ei näytä virhettä tavallisessa virhevirrassa. Vika ilmoitetaan kuitenkin nollasta poikkeavana palautusarvona.
Tämän lisäksi voimme havaita saman käyttäytymisen myös silloin, kun tiedostoa ei voi lukea. Joten ensin muokkaa tiedoston käyttöoikeuksia chmod-komennolla:
chmod 000 input.txt
ls -l input.txt
Yritä nyt etsiä mallia ja tarkkailla tulosta:
fgrep -s professionals input.txt
echo $?
9. Osittain osuvien rivien sulkeminen pois
Aiemmissa esimerkeissä näimme, että fgrep-komento suorittaa osittaisen vastaavuuden. Joissakin tapauksissa meidän on kuitenkin suoritettava tarkka vastaavuus koko riville. Tällaisissa tapauksissa voimme käyttää fgrep-komennon -x
-vaihtoehtoa.
fgrep -nx "the same site is sometimes hard to find." input.txt
Yllä olevassa tulosteessa tarkka rivin vastaavuus tapahtuu rivillä 20.
10. Tiedostojen poissulkeminen rekursiivisessa haussa
Joskus meidän on ohitettava tietyt tiedostot hakutoimintojen aikana. Tällaisissa tapauksissa voimme käyttää fgrep-komennon --exclude
-vaihtoehtoa.
Ymmärtääksesi tämän, luo ensin hakemisto ja kopioi siihen muutama esimerkkitiedosto:
mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md
Etsitään nyt mallia kaikista dir-1-hakemiston tiedostoista paitsi .txt ”
-tiedostoista:
fgrep -r --exclude *.txt professionals dir-1
Yllä olevasta lähdöstä voimme nähdä, että mallin täsmäytys suoritettiin tiedostoille, joissa on .md ”
ja .data ”
laajennukset.
11. Kuinka sulkea pois useita tiedostotyyppejä rekursiivisessa haussa
Edellisessä esimerkissä näimme, kuinka voit sulkea pois tiedostot tietyillä tunnisteilla. Komennosta tulee kuitenkin pitkä, kun haluamme sulkea pois tiedostot, joilla on useita laajennuksia. Tällaisissa tapauksissa voimme tarjota poissulkemiskuvion tiedostosta komentoriviargumentin sijaan:
Luodaan siis tekstitiedosto, joka sisältää useita poissulkemismalleja erillisellä rivillä:
cat skip-pattern.txt
*.txt
*.data
Käytetään nyt tätä tiedostoa --exclude-from
-vaihtoehdon kanssa:
fgrep -r --exclude-from skip-pattern.txt professionals dir-1
Tässä voimme nähdä, että mallin täsmäytys suoritettiin vain tiedostoille, joissa on .md ”
-tunniste.
12. Tiedostojen sisällyttäminen rekursiiviseen hakuun
Edellisissä esimerkeissä näimme, kuinka tiedostoja voidaan sulkea pois suoritettaessa hakutoimintoja rekursiivisesti. Katsotaanpa nyt, kuinka toimenpide suoritetaan käänteisellä tavalla.
Tehdään haku "*.txt "
-tunnisteella varustetuista tiedostoista fgrep-komennon --include
-vaihtoehdon avulla:
fgrep -r --include "*.txt" professionals dir-1
Yllä olevassa tulosteessa voimme nähdä, että mallin täsmäytys ohitetaan tiedostoille, joiden pääte on "*.md "
ja "*.data "
.
Tässä artikkelissa käsittelimme hyödyllisiä esimerkkejä fgrep-komennosta. Aloittelijat voivat käyttää näitä esimerkkejä päivittäisessä elämässään parantaakseen tuottavuuttaan työskennellessään Linuxin kanssa.
Tiedätkö muita parhaita esimerkkejä fgrep-komennosta Linuxissa? Kerro meille mielipiteesi alla olevissa kommenteissa.