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 myfileKrā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 myfilevai
$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 NĒ 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
- Vispirms saskaitiet, cik rindu ir failā /etc /passwd.
- Tagad atrodiet visus teksta gadījumus kur failā /etc /passwd .
- Atrodiet, cik rindiņu failā ir teksts
- Atrodiet, cik rindu NAV teksta kur .
- 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 nē š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 failsLai atrastu visas rindiņas, kas beidzas ar tekstu, izmantojot $ rakstzīmi:
$satvēriens“Xyz $” mans failsLai atrastu rindas, kurās ir virkne, izmantojot gan ^, gan $ rakstzīmes:
$satvēriens“^Xyz $” mans failsLai atrastu līnijas, izmantojot . lai atbilstu jebkuram raksturam:
$satvēriens“^X.z” mans failsLai atrastu rindas, izmantojot *, lai tās atbilstu 0 vai vairāk no iepriekšējās izteiksmes:
$satvēriens'^Xy*z ’myfileLai atrastu rindas, izmantojot.*, Lai atbilstu 0 vai vairāk jebkuras rakstzīmes:
$satvēriens'^ X.*z ’myfileLai atrastu līnijas, izmantojot lai izvairītos no * rakstura:
$satvēriens'^ X *z ’myfileLai atrastu rakstzīmi, izmantojiet:
$satvēriens“\” mans failsIzteiksme 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 |
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 nē 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/passwdTomēr lielākajā daļā Linux sistēmu komanda grep -E ir tas pats, kas lietot egrep :
$satvēriens -UN '(^sakne |^uucp |^pasts)' /utt/passwdFiltru 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ākFiltru izmantošanas piemēri ir šādas komandas:
$ps -gaļa|satvērienscron $PVO|satvērienskdmFaila 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 25000Personī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
- Parādiet failu cilvēki un izpētīt tā saturu.
- 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.
- Izveidojiet jaunu failu, npeople, kurā ir visas rindas, kas sākas ar virkni Personīga cilvēku failā. Padoms: izmantojiet komandu grep ar>.
- Apstipriniet faila saturu, norādot failu.
- Tagad pievienojiet visas rindiņas, kur teksts beidzas ar virkni 500 failā cilvēki uz failu npeople. Padoms: izmantojiet komandu grep ar >>.
- Vēlreiz apstipriniet faila saturu cilvēkiem, uzskaitot failu.
- Atrodiet failā saglabātā servera IP adresi /etc/hosts . Padoms: izmantojiet komandu grep ar $ (resursdatora nosaukums)
- 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 failsLai atrastu rindas, izmantojot | lai atbilstu kādai izteiksmei virknē, izmantojiet arī ():
$egrep‘^ X(Yz|yz)'Mans failsLai atrastu rindas, izmantojot [], lai tās atbilstu jebkurai rakstzīmei:
$egrep‘^ X[Yy]z ’myfileLai atrastu rindas, izmantojot [], lai tās neatbilst nevienai rakstzīmei:
$egrep‘^ X[^ Jā]z ’myfileLai atrastu rindas, izmantojot *, lai tās atbilstu 0 vai vairāk no iepriekšējās izteiksmes:
$egrep'^Xy*z ’myfileLai atrastu rindas, izmantojot +, lai atbilstu 1 vai vairākām iepriekšējām izteiksmēm:
$egrep“^Xy+z” mans failsLai atrastu līnijas, izmantojot? atbilst 0 vai 1 iepriekšējai izteiksmei:
$egrep“^Xy? Z” mans failsIII vingrinājums
- Atrodiet visas rindas, kurās ir nosaukumi Evans vai gleznotājs kartotēkā cilvēki.
- Atrodiet visas rindas, kurās ir nosaukumi Smits, Smits vai Smits kartotēkā cilvēki.
- Atrodiet visas rindas, kurās ir nosaukumi Brūns, Brauns vai Avots failā cilvēki. Ja jums ir laiks:
- Atrodiet rindu, kurā ir virkne (administrators), ieskaitot iekavas, failā cilvēki.
- Failā People atrodiet rindu, kas satur rakstzīmi *.
- 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 ’myfileLai 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 ’myfileLai atrastu rindas, izmantojot {}, lai atbilstu N reizes, bet ne vairāk kā M reizes:
$egrep'^Xy{2,3}z ’myfileSecinā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
Atrodiet, cik rindu NAV teksta kur .
satvēriens -cvkur/utt/passwdAtrodiet 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 .
Atrodiet rindiņu, kas satur rakstzīmi * kartotēkā cilvēki.
$ egrep '*' people
Apvienojiet 5. un 6. punktu, lai atrastu abas izteiksmes.