Nimi pito tulee ed (ja vim) -komennosta g/re/p, mikä tarkoittaa tietyn säännöllisen lausekkeen maailmanlaajuista etsimistä ja tulostuksen tulostamista (näyttämistä).
Säännöllinen Lausekkeet
Apuohjelmien avulla käyttäjä voi etsiä tekstitiedostoista rivejä, jotka vastaavat säännöllistä lauseketta ( säännöllinen lauseke ). Säännöllinen lauseke on hakumerkkijono, joka koostuu tekstistä ja yhdestä tai useammasta 11 erikoismerkistä. Yksinkertainen esimerkki on rivin alun vastaaminen.
Esimerkkitiedosto
Perusmuoto pito voidaan käyttää yksinkertaisen tekstin etsimiseen tietystä tiedostosta tai tiedostoista. Voit kokeilla esimerkkejä luomalla ensin mallitiedoston.
Kopioi alla oleva teksti tiedostoon nimeltä editori, kuten nano tai vim minun tiedostoni .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Vaikka voit kopioida ja liittää esimerkkejä tekstiin (huomaa, että lainausmerkit eivät välttämättä kopioi oikein), komennot on kirjoitettava, jotta ne oppivat oikein.
Ennen kuin yrität esimerkkejä, katso mallitiedosto:
$kissaminun tiedostoni
Yksinkertainen haku
Etsi tiedosto 'xyz' tiedostosta seuraavasti:
$pitoxyz -tiedostoVärien käyttäminen
Jos haluat näyttää värit, käytä –väriä (kaksoisviiva) tai luo alias. Esimerkiksi:
$pito --värixyz -tiedostotai
$alias pito= 'pito--väri'$pitoxyz -tiedosto
Asetukset
Yleisiä vaihtoehtoja, joita käytetään pito komento sisältää:
- -Löydän kaikki rivit riippumatta tapauksesta
- -c Kreivi kuinka monta riviä teksti sisältää
- -näyttörivi numeroita vastaavista linjoista
- -vain näyttö tiedosto nimet tuo ottelu
- -r rekursiivinen alihakemistojen haku
- -v löytää kaikki rivit EI sisältää tekstin
Esimerkiksi:
$pito -ixyz -tiedosto# Etsi teksti tapauksesta riippumatta$pito -icxyz -tiedosto# laske rivejä tekstin kanssa
$pito -sisäänxyz -tiedosto# näyttää rivinumerot
Luo useita tiedostoja
Ennen kuin yrität etsiä useita tiedostoja, luo ensin useita uusia tiedostoja:
$heitti poisxyz>oma tiedosto 1$heitti pois -Jaxyz nxzz nXYZ>oma tiedosto 2
$heitti pois -Jaxxx nyy>oma tiedosto 3
$kissaoma tiedosto 1
$kissaoma tiedosto 2
$kissaoma tiedosto 3
Hae useista tiedostoista
Jos haluat etsiä useita tiedostoja käyttämällä tiedostonimiä tai yleismerkkiä, kirjoita:
$pito -icxyz myfile myfile1 myfile2 myfile3$pito -sisäänxyz minun*
# vastaavat tiedostonimet, jotka alkavat 'minun'
Harjoitus I
- Laske ensin kuinka monta riviä tiedostossa /etc /passwd on.
- Etsi nyt kaikki tekstin esiintymät missä tiedostossa /etc /passwd .
- Selvitä, kuinka monta tiedoston riviä teksti sisältää
- Selvitä, kuinka monta riviä EI sisällä tekstiä missä .
- Etsi kirjautumistietosi kohdasta /etc/passwd
Harjoitusratkaisut löytyvät tämän artikkelin lopusta.
Säännöllisten lausekkeiden käyttäminen
Käsky pito voidaan käyttää myös säännöllisten lausekkeiden kanssa käyttämällä yhtä tai useampaa yksitoista erikoismerkkiä tai symbolia haun tarkentamiseen. Säännöllinen lauseke on merkkijono, joka sisältää erikoismerkkejä, jotka mahdollistavat kuvioiden vastaavuuden apuohjelmissa, kuten pito , tulin ja sed . Huomaa, että merkkijonot on ehkä liitettävä lainausmerkkeihin.
Käytettävissä olevia erikoismerkkejä ovat:
^ | Rivin alku |
$ | Rivin loppu |
. | Mikä tahansa merkki (paitsi n uusi rivi) |
* | 0 tai enemmän edellistä lauseketta |
Edellä oleva symboli tekee siitä kirjaimellisen merkin |
Huomaa, että *, jota voidaan käyttää komentorivillä vastaamaan mitä tahansa määrää merkkejä, ei yhtään, on ei käytetään täällä samalla tavalla.
Huomaa myös lainausmerkkien käyttö seuraavissa esimerkeissä.
Esimerkkejä
Löydät kaikki tekstillä alkavat rivit käyttämällä ^ -merkkiä:
$pito'^Xyz' -kansioJos haluat löytää kaikki tekstillä päättyvät rivit käyttämällä $ -merkkiä:
$pito'Xyz $' -kansioJos haluat löytää rivit, jotka sisältävät merkkijonon, joka käyttää sekä ^ - että $ -merkkejä:
$pito'^Xyz $' omatiedostotVoit etsiä rivejä käyttämällä . vastaamaan mitä tahansa hahmoa:
$pito'^X.z' omatiedostoniJos haluat löytää rivit *: n avulla, jotka vastaavat 0 tai enemmän edellistä lauseketta:
$pito’^Xy*z 'myfileRivien etsiminen käyttämällä.* Vastaamaan 0 tai enemmän mitä tahansa merkkiä:
$pito’^ X.*z 'myfileVoit etsiä rivejä käyttämällä paeta * -merkistä:
$pito'^ X *z 'myfileLöydät merkin seuraavasti:
$pito'\' oma tiedostoLauseke grep - egrep
The pito komento tukee vain osaa käytettävissä olevista säännöllisistä lausekkeista. Kuitenkin komento egrep:
- mahdollistaa kaikkien säännöllisten lausekkeiden täyden käytön
- voi samanaikaisesti etsiä useampaa lauseketta
Huomaa, että lausekkeet on liitettävä lainauspariin.
Jos haluat käyttää värejä, käytä –väriä tai luo alias uudelleen:
$alias egrep='egrep -väri'Jos haluat etsiä useamman kuin yhden regex the egrep komento voidaan kirjoittaa usealle riville. Tämä voidaan kuitenkin tehdä myös käyttämällä näitä erikoismerkkejä:
| | Vaihtoehto, joko yksi tai toinen |
(…) | Lausekkeen osan looginen ryhmittely |
Tämä poimii tiedostosta rivit, jotka alkavat juurilla, uucpilla tai postilla, | symboli, joka tarkoittaa jompaa kumpaa vaihtoehtoa.
Seuraava komento tekee ei toimi, vaikka viestiä ei näytetä, koska perus pito komento ei tue kaikkia säännöllisiä lausekkeita:
$pito '(^root |^uucp |^mail)' /jne/passwdKuitenkin useimmissa Linux -järjestelmissä komento grep -E on sama kuin käyttää egrep :
$pito -JA '(^root |^uucp |^mail)' /jne/passwdSuodattimien käyttäminen
Putkisto on prosessi, jolla yhden komennon tulos lähetetään syötteeksi toiseen komentoon, ja se on yksi tehokkaimmista käytettävissä olevista Linux -työkaluista.
Putkistoon ilmestyviä komentoja kutsutaan usein suodattimiksi, koska monissa tapauksissa ne selaavat tai muokkaavat heille syötettyä tuloa ennen kuin ne lähettävät muokatun virran vakiolähtöön.
Seuraavassa esimerkissä vakiolähtö ls -l välitetään vakiotulona pito komento. Lähtö pito komento välitetään syötteeksi lisää komento.
Tämä näyttää vain hakemistot /jne :
$ls -he /jne|pito'^D'|lisääSeuraavat komennot ovat esimerkkejä suodattimien käytöstä:
$ps -ef|pitocron $WHO|pitokdmEsimerkkitiedosto
Voit kokeilla tarkistusharjoitusta luomalla ensin seuraavan esimerkkitiedoston.
Kopioi alla oleva teksti tiedostoon nimeltä editori, kuten nano tai vim ihmiset:
Henkilökohtainen J.Smith 25000Henkilökohtainen E.Smith 25400
Koulutus A.Brown 27500
Koulutus C.Browen 23400
(Järjestelmänvalvoja) R.Bron 30500
Goodsout T.Smyth 30000
Henkilökohtainen F.Jones 25000
koulutus* C.Evans 25500
Goodsout W.Pope 30400
Pohjakerros T.Smythe 30500
Henkilökohtainen J.Maler 33000
Harjoitus II
- Näytä tiedosto ihmiset ja tutkia sen sisältöä.
- Etsi kaikki rivit, jotka sisältävät merkkijonon Smith Vinkki: käytä komentoa grep, mutta muista, että oletusarvoisesti se erottaa isot ja pienet kirjaimet.
- Luo uusi tiedosto, npeople, joka sisältää kaikki merkkijonolla alkavat rivit Henkilökohtainen Vihje: käytä komentoa grep ja>.
- Vahvista tiedoston sisältö ihmisille luetteloimalla tiedosto.
- Liitä nyt kaikki rivit, joissa teksti päättyy merkkijonoon 500 Vinkki: käytä komentoa grep >> kanssa.
- Vahvista uudelleen tiedoston sisältö ihmisille luetteloimalla tiedosto.
- Etsi tiedostoon tallennetun palvelimen IP -osoite /etc/hosts .Vihje: käytä komentoa grep komennolla $ (isäntänimi)
- Käyttää egrep poimia /etc/passwd tiedostotilin rivit, jotka sisältävät lp tai omaasi käyttäjätunnus .
Harjoitusratkaisut löytyvät tämän artikkelin lopusta.
Lisää säännöllisiä lausekkeita
Säännöllistä lauseketta voidaan ajatella steroidien yleismerkeinä.
Siinä on yksitoista merkkiä, joilla on erityinen merkitys: avaavat ja sulkevat hakasulkeet [], käänteisviiva , caret ^, dollarimerkki $, piste tai piste., Pystysuora palkki tai putken symboli | tähti tai tähti *, plusmerkki + sekä avaus- ja sulkukierros {}. Näitä erikoismerkkejä kutsutaan usein myös metamerkkeiksi.
Tässä on koko joukko erikoismerkkejä:
^ | Rivin alku |
$ | Rivin loppu |
. | Mikä tahansa merkki (paitsi n uusi rivi) |
* | 0 tai enemmän edellistä lauseketta |
| | Vaihtoehto, joko yksi tai toinen |
[…] | Selkeä merkkijoukko vastaamaan |
+ | 1 tai useampi edellinen lauseke |
? | 0 tai 1 edellisestä lausekkeesta |
Edellä oleva symboli tekee siitä kirjaimellisen merkin | |
{…} | Selkeä määrällinen merkintä |
(…) | Lausekkeen osan looginen ryhmittely |
Oletusversio pito on vain rajoitettu säännöllisen lausekkeen tuki. Jotta kaikki seuraavat esimerkit toimisivat, käytä egrep sen sijaan tai grep -E .
Voit etsiä rivejä käyttämällä | vastaamaan jompaakumpaa lauseketta:
$egrep'Xxz|xzz -tiedostoRivien etsiminen käyttämällä | vastaamaan jompaakumpaa lauseketta merkkijonossa, käytä myös ():
$egrep’^ X(Yz|yz)’TiedostoniRivien etsiminen käyttämällä [] -merkkiä vastaamaan mitä tahansa merkkiä:
$egrep’^ X[Yy]z 'myfileJos haluat löytää rivit, joilla [] EI vastaa mitään merkkiä:
$egrep’^ X[^ Joo]z 'myfileJos haluat löytää rivit *: n avulla, jotka vastaavat 0 tai enemmän edellistä lauseketta:
$egrep’^Xy*z 'myfileJos haluat löytää rivit + -painikkeella, joka vastaa yhtä tai useampaa edellistä lauseketta:
$egrep'^Xy+z' tiedostoEtsi rivit käyttämällä? vastaa 0 tai 1 edellisestä lausekkeesta:
$egrep'^Xy? Z' omatiedostotHarjoitus III
- Etsi kaikki rivit, jotka sisältävät nimet Evans tai taidemaalari arkistossa ihmiset.
- Etsi kaikki rivit, jotka sisältävät nimet Smith, Smyth tai Smythe arkistossa ihmiset.
- Etsi kaikki rivit, jotka sisältävät nimet Ruskea, Browen tai Lähde Jos sinulla on aikaa:
- Etsi merkkijonon sisältävä rivi (ylläpitäjä), mukaan lukien hakasulkeet, tiedostoon ihmiset.
- Etsi rivi, joka sisältää merkin * tiedostoista people.
- Yhdistä yllä ja 5 löytääksesi molemmat lausekkeet.
Lisää esimerkkejä
Voit etsiä rivejä käyttämällä . ja * vastaamaan mitä tahansa merkistöä:
$egrep’^Xy.*z 'myfileJos haluat löytää rivit, jotka käyttävät {} -merkkiä vastaamaan N -merkkimäärää:
$egrep’^Xy{3}z 'myfile$egrep’^Xy{4}z 'myfile
Jos haluat löytää rivit, jotka käyttävät {} yhtä monta kertaa tai useammin:
$egrep’^Xy{3,}z 'myfileJos haluat löytää rivit {} -toiminnolla, jotka vastaavat N kertaa, mutta enintään M kertaa:
$egrep’^Xy{2,3}z 'myfileJohtopäätös
Tässä opetusohjelmassa tarkastelimme ensin käyttöä pito yksinkertaisessa muodossa löytää tekstiä tiedostosta tai useista tiedostoista. Yhdistimme sitten etsittävän tekstin yksinkertaisiin säännöllisiin lausekkeisiin ja sitten monimutkaisempiin lausekkeisiin egrep .
Seuraavat vaiheet
Toivon, että käytät täällä saatuja tietoja hyväksi. Kokeilla pito komentoja omiin tietoihisi ja muista, että tässä kuvattuja säännöllisiä lausekkeita voidaan käyttää samassa muodossa me , sed ja awk !
Harjoitusratkaisut
Harjoitus I
Laske ensin kuinka monta riviä tiedostossa on /etc/passwd .
$ wc -l /etc/passwd
Etsi nyt kaikki tekstin esiintymät missä tiedostossa /etc /passwd.
$ grep var /etc/passwd
Selvitä, kuinka monta tiedoston riviä teksti sisältää missä
Selvitä, kuinka monta riviä EI sisällä tekstiä missä .
pito -CVmissä/jne/passwdEtsi kirjautumistietosi kohdasta /etc/passwd tiedosto
grep kdm /etc/passwd
Harjoitus II
Näytä tiedosto ihmiset ja tutkia sen sisältöä.
$ cat people
Etsi kaikki rivit, jotka sisältävät merkkijonon Smith tiedostossa ihmiset .
$ grep 'Smith' people
Luo uusi tiedosto, npeople , joka sisältää kaikki merkkijonolla alkavat rivit Henkilökohtainen kohdassa ihmiset tiedosto
$ grep '^Personal' people> npeople
Vahvista tiedoston sisältö npeople luetteloimalla tiedosto.
$ cat npeople
Liitä nyt kaikki rivit, joissa teksti päättyy merkkijonoon 500 tiedostossa ihmiset tiedostoon npeople .
$ grep '500$' people>>npeople
Vahvista vielä kerran tiedoston sisältö npeople luetteloimalla tiedosto.
$ cat npeople
Etsi tiedostoon tallennetun palvelimen IP -osoite /etc/hosts .
$ grep $(hostname) /etc/hosts
Käyttää egrep poimia /etc/passwd tiedostotilin rivit, jotka sisältävät lp tai oma käyttäjätunnuksesi.
$ egrep '(lp|kdm:)' /etc/passwd
Harjoitus III
Etsi kaikki rivit, jotka sisältävät nimet Evans tai taidemaalari tiedostossa ihmiset .
$ egrep 'Evans|Maler' people
Etsi kaikki rivit, jotka sisältävät nimet Smith , Smyth tai Smythe tiedostossa ihmiset .
$ egrep 'Sm(i|y)the?' people
Etsi kaikki rivit, jotka sisältävät nimet Ruskea , Browen tai Lähde arkistossa ihmiset.
$ egrep 'Brow?e?n' people
Etsi merkkijonon sisältävä rivi (ylläpitäjä), hakasulkeet mukaan lukien ihmiset .
Etsi rivi, joka sisältää merkin * arkistossa ihmiset.
$ egrep '*' people
Yhdistä yllä ja 5 löytääksesi molemmat lausekkeet.