Grep (un egrep) izmantošana ar regulārajām izteiksmēm

Using Grep With Regular Expressions



Šajā apmācībā ir aprakstīts, kā izmantot abus satvēriens (un egrep) t o atrast tekstu failos, to vienkāršā formā un apvienojumā ar regulārām izteiksmēm. Tas satur vairākus piemēri un vingrinājumi , vairāk risinājumi , lai skatītājs to pabeigtu.

Vārds satvēriens nāk no ed (un vim) komandas g/re/p, kas nozīmē globāli meklēt noteiktu regulāro izteiksmi un izdrukāt (parādīt) izvadi.







Regulāri Izteicieni

Komunālie pakalpojumi ļauj lietotājam meklēt teksta failos rindas, kas atbilst regulārajai izteiksmei ( regulārā izteiksme ). Regulāra izteiksme ir meklēšanas virkne, kas sastāv no teksta un viena vai vairākām 11 īpašajām rakstzīmēm. Vienkāršs piemērs ir rindas sākuma atbilstība.



Faila paraugs

Pamata forma satvēriens var izmantot, lai atrastu vienkāršu tekstu noteiktā failā vai failos. Lai izmēģinātu piemērus, vispirms izveidojiet parauga failu.



Izmantojiet redaktoru, piemēram, nano vai vim, lai kopētu zemāk esošo tekstu failā ar nosaukumu myfile .





xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Lai gan jūs varat kopēt un ielīmēt piemērus tekstā (ņemiet vērā, ka pēdiņas var nekopēt pareizi), komandas ir jāievada, lai tās pareizi apgūtu.

Pirms izmēģināt piemērus, apskatiet faila paraugu:



$kaķismyfile

Vienkārša meklēšana

Lai failā atrastu tekstu “xyz”, rīkojieties šādi:

$satvēriensxyz myfile

Krāsu izmantošana

Lai parādītu krāsas, izmantojiet –color (dubultā defise) vai vienkārši izveidojiet aizstājvārdu. Piemēram:

$satvēriens -krāsaxyz myfile

vai

$pseidonīms satvēriens= 'satvēriens-krāsa '
$satvēriensxyz myfile

Iespējas

Kopējās iespējas, kas tiek izmantotas kopā ar satvēriens komanda ietver:

  • -Es atrodu visas līnijas neatkarīgi no lietas
  • -c saskaitīt cik rindās ir teksts
  • -displeja līnija numurus no atbilstošām līnijām
  • -tikai displejs failu vārdi tas mačs
  • -r rekursīvs apakšdirektoriju meklēšana
  • -v atrast visas līnijas kas satur tekstu

Piemēram:

$satvēriens -ixyz myfile# atrast tekstu neatkarīgi no gadījuma

$satvēriens -icxyz myfile# saskaitiet rindas ar tekstu

$satvēriens -iekšāxyz myfile# rāda rindu numurus

Izveidojiet vairākus failus

Pirms mēģināt meklēt vairākus failus, vispirms izveidojiet vairākus jaunus failus:

$izmest ārāxyz>mans fails 1
$izmest ārā -Unxyz nxzz nXYZ>mans fails2
$izmest ārā -Unxxx njā>mans fails 3
$kaķismans fails 1
$kaķismans fails2
$kaķismans fails 3

Meklēt vairākos failos

Lai meklētu vairākus failus, izmantojot failu nosaukumus vai aizstājējzīmi, ievadiet:

$satvēriens -icxyz myfile myfile1 myfile2 myfile3
$satvēriens -iekšāxyz my*
# atbilst failu nosaukumi, kas sākas ar “mans”

Vingrinājums I

  1. Vispirms saskaitiet, cik rindu ir failā /etc /passwd.
Padoms: izmantottualete -viņi /utt/passwd
  1. Tagad atrodiet visus teksta gadījumus kur failā /etc /passwd .
  2. Atrodiet, cik rindiņu failā ir teksts
  3. Atrodiet, cik rindu NAV teksta kur .
  4. Atrodiet pieteikšanās ierakstu sadaļā /etc/passwd

Vingrinājumu risinājumus var atrast šī raksta beigās.

Regulāro izteiksmju izmantošana

Komanda satvēriens var izmantot arī ar regulārām izteiksmēm, lai precizētu meklēšanu, izmantojot vienu vai vairākas no vienpadsmit īpašajām rakstzīmēm vai simboliem. Regulāra izteiksme ir rakstzīmju virkne, kas ietver īpašas rakstzīmes, lai varētu saskaņot modeļus tādos utilītos kā, piemēram, satvēriens , ES atnācu un sed . Ņemiet vērā, ka virknes var būt jāiekļauj pēdiņās.

Pieejamās īpašās rakstzīmes ietver:

^ Rindas sākums
$ Rindas beigas
. Jebkura rakstzīme (izņemot n jaunu rindiņu)
* 0 vai vairāk no iepriekšējās izteiksmes
Pirms simbola tas kļūst par burtisku raksturu

Ņemiet vērā, ka *, ko var izmantot komandrindā, lai atbilstu jebkuram rakstzīmju skaitam, ieskaitot nevienu, ir šeit tiek lietots tādā pašā veidā.

Ņemiet vērā arī citātu izmantošanu turpmākajos piemēros.

Piemēri

Lai atrastu visas rindas, kas sākas ar tekstu, izmantojot ^ rakstzīmi:

$satvēriens“^Xyz” mans fails

Lai atrastu visas rindiņas, kas beidzas ar tekstu, izmantojot $ rakstzīmi:

$satvēriens“Xyz $” mans fails

Lai atrastu rindas, kurās ir virkne, izmantojot gan ^, gan $ rakstzīmes:

$satvēriens“^Xyz $” mans fails

Lai atrastu līnijas, izmantojot . lai atbilstu jebkuram raksturam:

$satvēriens“^X.z” mans fails

Lai atrastu rindas, izmantojot *, lai tās atbilstu 0 vai vairāk no iepriekšējās izteiksmes:

$satvēriens'^Xy*z ’myfile

Lai atrastu rindas, izmantojot.*, Lai atbilstu 0 vai vairāk jebkuras rakstzīmes:

$satvēriens'^ X.*z ’myfile

Lai atrastu līnijas, izmantojot lai izvairītos no * rakstura:

$satvēriens'^ X *z ’myfile

Lai atrastu rakstzīmi, izmantojiet:

$satvēriens“\” ​​mans fails

Izteiksme grep - egrep

The satvēriens komanda atbalsta tikai pieejamo regulāro izteiksmju apakškopu. Tomēr pavēle egrep:

  • ļauj pilnībā izmantot visas regulārās izteiksmes
  • vienlaikus var meklēt vairāk nekā vienu izteiksmi

Ņemiet vērā, ka izteiksmes jāiekļauj pēdiņās.

Lai izmantotu krāsas, izmantojiet –color vai vēlreiz izveidojiet aizstājvārdu:

$pseidonīms egrep='egrep -krāsa'

Lai meklētu vairāk nekā vienu regulārā izteiksme un egrep komandu var rakstīt vairākās rindās. Tomēr to var izdarīt, izmantojot šīs īpašās rakstzīmes:

| Alternatīva, vai nu viena, vai otra
(…) Izteiksmes daļas loģiska grupēšana
$egrep '(^sakne |^uucp |^pasts)' /utt/passwd

Tādējādi no faila tiek izvilktas rindas, kas sākas ar sakni, uucp vai pastu simbols, kas nozīmē kādu no iespējām.

Sekos šāda komanda darbs, lai gan neviens ziņojums netiek parādīts, jo pamata satvēriens komanda neatbalsta visas regulārās izteiksmes:

$satvēriens '(^sakne |^uucp |^pasts)' /utt/passwd

Tomēr lielākajā daļā Linux sistēmu komanda grep -E ir tas pats, kas lietot egrep :

$satvēriens -UN '(^sakne |^uucp |^pasts)' /utt/passwd

Filtru izmantošana

Cauruļvads ir vienas komandas izvades nosūtīšanas process citā komandā, un tas ir viens no visspēcīgākajiem pieejamajiem Linux rīkiem.

Komandas, kas parādās konveijerā, bieži tiek sauktas par filtriem, jo ​​daudzos gadījumos tās izsijā vai pārveido tām nodoto ievadi pirms modificētās straumes nosūtīšanas uz standarta izvadi.

Nākamajā piemērā standarta izvade no ls -l tiek nodota kā standarta ievade satvēriens komandu. Izeja no satvēriens komanda tiek nodota kā ievade vairāk komandu.

Tas parādīs tikai direktorijus /utt :

$ls -viņi /utt|satvēriens“^D”|vairāk

Filtru izmantošanas piemēri ir šādas komandas:

$ps -gaļa|satvērienscron

$PVO|satvērienskdm

Faila paraugs

Lai izmēģinātu pārskatīšanas uzdevumu, vispirms izveidojiet šādu faila paraugu.

Izmantojiet redaktoru, piemēram, nano vai vim, lai kopētu zemāk esošo tekstu failā ar nosaukumu cilvēki:

Personīgais J.Smith 25000
Personīgais E.Smith 25400
Apmācība A.Brown 27500
Apmācība C.Browen 23400
(Administrators) R.Bron 30500
Goodsout T.Smyth 30000
Personīgais F.Jones 25000
apmācība* C.Evans 25500
Goodsout W.Pope 30400
Stāvs T.Smythe 30500
Personīgais J.Maler 33000

II vingrinājums

  1. Parādiet failu cilvēki un izpētīt tā saturu.
  2. Atrodiet visas līnijas, kurās ir virkne Smits failā people.Padoms: izmantojiet komandu grep, taču atcerieties, ka pēc noklusējuma tas ir reģistrjutīgs.
  3. Izveidojiet jaunu failu, npeople, kurā ir visas rindas, kas sākas ar virkni Personīga cilvēku failā. Padoms: izmantojiet komandu grep ar>.
  4. Apstipriniet faila saturu, norādot failu.
  5. Tagad pievienojiet visas rindiņas, kur teksts beidzas ar virkni 500 failā cilvēki uz failu npeople. Padoms: izmantojiet komandu grep ar >>.
  6. Vēlreiz apstipriniet faila saturu cilvēkiem, uzskaitot failu.
  7. Atrodiet failā saglabātā servera IP adresi /etc/hosts . Padoms: izmantojiet komandu grep ar $ (resursdatora nosaukums)
  8. Izmantot egrep lai iegūtu no /etc/passwd failu kontu rindas, kas satur lp vai savējais Lietotāja ID .

Vingrinājumu risinājumus var atrast šī raksta beigās.

Vairāk regulāro izteiksmju

Regulāro izteiksmi var uzskatīt par aizstājējzīmēm uz steroīdiem.

Ir vienpadsmit rakstzīmes ar īpašām nozīmēm: sākuma un beigu kvadrātiekavas [], slīpsvītra , caret ^, dolāra zīme $, punkts vai punkts., Vertikālā josla vai caurules simbols |, jautājuma zīme? zvaigznīte vai zvaigznīte *, pluszīme + un sākuma un aizvēršanas apaļa iekava {}. Šīs īpašās rakstzīmes bieži sauc arī par metatīklām.

Šeit ir pilns īpašo rakstzīmju komplekts:

^ Rindas sākums
$ Rindas beigas
. Jebkura rakstzīme (izņemot n jaunu rindiņu)
* 0 vai vairāk no iepriekšējās izteiksmes
| Alternatīva, vai nu viena, vai otra
[…] Skaidrs atbilstošu rakstzīmju kopums
+ 1 vai vairākas iepriekšējās izteiksmes
? 0 vai 1 no iepriekšējās izteiksmes
Pirms simbola tas kļūst par burtisku raksturu
{…} Skaidrs kvantifikatora apzīmējums
(…) Izteiksmes daļas loģiska grupēšana

Noklusējuma versija satvēriens ir tikai ierobežots regulārās izteiksmes atbalsts. Lai visi tālāk minētie piemēri darbotos, izmantojiet egrep vietā vai grep -E .

Lai atrastu līnijas, izmantojot | lai atbilstu jebkurai izteiksmei:

$egrep“Xxz|xzz 'mans fails

Lai atrastu rindas, izmantojot | lai atbilstu kādai izteiksmei virknē, izmantojiet arī ():

$egrep‘^ X(Yz|yz)'Mans fails

Lai atrastu rindas, izmantojot [], lai tās atbilstu jebkurai rakstzīmei:

$egrep‘^ X[Yy]z ’myfile

Lai atrastu rindas, izmantojot [], lai tās neatbilst nevienai rakstzīmei:

$egrep‘^ X[^ Jā]z ’myfile

Lai atrastu rindas, izmantojot *, lai tās atbilstu 0 vai vairāk no iepriekšējās izteiksmes:

$egrep'^Xy*z ’myfile

Lai atrastu rindas, izmantojot +, lai atbilstu 1 vai vairākām iepriekšējām izteiksmēm:

$egrep“^Xy+z” mans fails

Lai atrastu līnijas, izmantojot? atbilst 0 vai 1 iepriekšējai izteiksmei:

$egrep“^Xy? Z” mans fails

III vingrinājums

  1. Atrodiet visas rindas, kurās ir nosaukumi Evans vai gleznotājs kartotēkā cilvēki.
  2. Atrodiet visas rindas, kurās ir nosaukumi Smits, Smits vai Smits kartotēkā cilvēki.
  3. Atrodiet visas rindas, kurās ir nosaukumi Brūns, Brauns vai Avots failā cilvēki. Ja jums ir laiks:
  4. Atrodiet rindu, kurā ir virkne (administrators), ieskaitot iekavas, failā cilvēki.
  5. Failā People atrodiet rindu, kas satur rakstzīmi *.
  6. Apvienojiet 5. un 6. punktu, lai atrastu abas izteiksmes.

Vairāk piemēru

Lai atrastu līnijas, izmantojot . un * lai atbilstu jebkurai rakstzīmju kopai:

$egrep'^Xy.*z ’myfile

Lai atrastu rindas, izmantojot {}, lai atbilstu N rakstzīmju skaitam:

$egrep'^Xy{3}z ’myfile
$egrep'^Xy{4}z ’myfile

Lai atrastu rindas, izmantojot {}, lai tās atbilstu N vai vairāk reizes:

$egrep'^Xy{3,}z ’myfile

Lai atrastu rindas, izmantojot {}, lai atbilstu N reizes, bet ne vairāk kā M reizes:

$egrep'^Xy{2,3}z ’myfile

Secinājums

Šajā apmācībā mēs vispirms apskatījām izmantošanu satvēriens vienkāršā formā, lai atrastu tekstu failā vai vairākos failos. Pēc tam mēs apvienojām meklējamo tekstu ar vienkāršām regulārām izteiksmēm un pēc tam sarežģītākām, izmantojot egrep .

Nākamie soļi

Es ceru, ka jūs lietosit šeit iegūtās zināšanas. Izmēģini satvēriens komandas saviem datiem un atcerieties, ka šeit aprakstītās regulārās izteiksmes var izmantot tādā pašā formā mēs , sed un awk !

Vingrinājumu risinājumi

Vingrinājums I

Vispirms saskaitiet, cik rindiņu ir failā /etc/passwd .
$ wc -l /etc/passwd
Tagad atrodiet visus teksta gadījumus kur failā /etc /passwd.
$ grep var /etc/passwd
Atrodiet, cik rindiņu failā ir teksts kur

satvēriens -ckur/utt/passwd

Atrodiet, cik rindu NAV teksta kur .

satvēriens -cvkur/utt/passwd

Atrodiet pieteikšanās ierakstu sadaļā /etc/passwd failu
grep kdm /etc/passwd

II vingrinājums

Parādiet failu cilvēki un izpētīt tā saturu.
$ cat people
Atrodiet visas līnijas, kurās ir virkne Smits failā cilvēki .
$ grep 'Smith' people
Izveidojiet jaunu failu, npeople , kas satur visas rindas, kas sākas ar virkni Personīga iekš cilvēki failu
$ grep '^Personal' people> npeople
Apstipriniet faila saturu npeople uzskaitot failu.
$ cat npeople
Tagad pievienojiet visas rindiņas, kur teksts beidzas ar virkni 500 failā cilvēki uz failu npeople .
$ grep '500$' people>>npeople
Vēlreiz apstipriniet faila saturu npeople uzskaitot failu.
$ cat npeople
Atrodiet failā saglabātā servera IP adresi /etc/hosts .
$ grep $(hostname) /etc/hosts
Izmantot egrep lai iegūtu no /etc/passwd failu kontu rindas, kas satur lp vai savu lietotāja ID.
$ egrep '(lp|kdm:)' /etc/passwd

III vingrinājums

Atrodiet visas rindas, kurās ir nosaukumi Evans vai gleznotājs failā cilvēki .
$ egrep 'Evans|Maler' people
Atrodiet visas rindas, kurās ir nosaukumi Smits , Smits vai Smits failā cilvēki .
$ egrep 'Sm(i|y)the?' people
Atrodiet visas rindas, kurās ir nosaukumi Brūns , Browen vai Avots kartotēkā cilvēki.
$ egrep 'Brow?e?n' people
Atrodiet rindu, kurā ir virkne (administrators), ieskaitot iekavas, failā cilvēki .

$egrep ' (Administrators )'cilvēki

Atrodiet rindiņu, kas satur rakstzīmi * kartotēkā cilvēki.
$ egrep '*' people
Apvienojiet 5. un 6. punktu, lai atrastu abas izteiksmes.

$egrep ' (Administrators ) | *'cilvēki