Ievads
Linux grep komanda tiek izmantota kā ievades filtrēšanas metode.
GREP nozīmē globālo regulāro izteiksmju printeri, un tāpēc, lai to efektīvi izmantotu, jums vajadzētu būt zināšanām par regulārām izteiksmēm.
Šajā rakstā es parādīšu vairākus piemērus, kas palīdzēs jums izprast grep komandu.
01 no 09
Kā meklēt virkni failā, izmantojot GREP
Iedomājieties, ka jums ir teksta fails ar nosaukumu "grāmatas ar šādiem bērnu grāmatu nosaukumiem:
- Robins Huds
- Mazā sarkanā ziza
- Pīters Pens
- Goldilocks un trīs lāči
- Sniega balta un septiņi punduri
- Pinnohija
- Kaķis cepurī
- Trīs mazās cūkas
- Gruffalo
- Čārlijs un šokolādes fabrika
Lai atrastu visas grāmatas ar vārdu "The" virsrakstā, izmantotu šādu sintaksi:
grep grāmatas
Atgriež šādus rezultātus:
- Goldilocks un trīs lāči
- Sniega balta un septiņi punduri
- Kaķis cepurī
- Trīs mazās cūkas
- Gruffalo
- Čārlijs un šokolādes fabrika
Katrā gadījumā tiks izcelts vārds "The".
Ņemiet vērā, ka meklēšana ir reģistrjutīga, tādēļ, ja kādam no nosaukumiem bija ", nevis" The ", tad tas nebūtu atgriezies.
Lai ignorētu lietu, varat pievienot šādu slēdzi:
Grup grāmatas - vēstnesis
Jūs varat arī izmantot -i slēdzi šādi:
grep-i grāmatas
02 no 09
Meklēt virkni failā, izmantojot aizstājējzīmes
Grep komanda ir ļoti spēcīga. Lai filtrētu rezultātus, varat izmantot virkni paraugu saskaņošanas paņēmienu.
Šajā piemērā es parādīšu, kā meklēt virknes failu, izmantojot aizstājējzīmes .
Iedomājieties, ka jums ir fails, ko sauc par vietām ar šādiem Skotijas vietvārdiem:
aberdeen
aberistuve
aberlour
inverurie
inverness
Newburgh
jauns brieži
jauns galolajs
glasgow
Edinburga
Ja jūs vēlaties atrast visas vietas ar nosaukumu apgrieztu, izmantojiet šādu sintaksi:
grep inver * vietas
Zvaigznīte (*) aizstājējzīme ir 0 vai daudzi. Tāpēc, ja jums ir vieta, ko sauc par inverti vai vietu, ko sauc par inverness, tad abi tiek atgriezti.
Vēl viena aizstājējzīme, kuru var izmantot, ir periods (.). Jūs varat to izmantot, lai atbilstu vienai vēstulei.
grep inver.r vietās
Iepriekš minētā komanda atradīs vietas, ko sauc par "inverurie" un "inverary", bet neatrodas invereerie, jo starp diviem r var būt tikai viens aizstājējzīme, ko apzīmē ar vienu periodu.
Periodiska aizstājējzīme ir noderīga, taču tā var radīt problēmas, ja jums ir kāds kā meklējamā teksta daļa.
Piemēram, aplūkojiet šo domēnu nosaukumu sarakstu
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Lai atrastu visu about.com, jūs varētu vienkārši meklēt, izmantojot šādu sintaksi:
grep * par * domainnames
Iepriekš minētā komanda nokritīs, ja sarakstā tajā iekļauts šāds nosaukums:
- everydaylinuxuser.com/about.html
Tādēļ varat izmēģināt šādu sintaksi:
grep * about.com domainnames
Tas darbojas labi, ja vien nav domēna ar šādu nosaukumu:
aboutycom.com
Lai tiešām meklētu terminu about.com, jums vajadzētu izvairīties no punkta šādi:
grep * par \ .com domainnames
Pēdējais aizstājējraksts, kas jums parādīsies, ir jautājuma zīme, kas nozīmē nulli vai vienu rakstzīmi.
Piemēram:
grepber vietname
Iepriekš minētā komanda atgriezīsies Aberdīnā, aberistu vai pat berwick.
03 no 09
Meklējiet virknes sākumā un beigās, izmantojot grep
Karātos (^) un dolāra ($) simbols ļauj meklēt modeļus līniju sākumā un beigās.
Iedomājieties, ka jums ir futbols ar šādiem komandas nosaukumiem:
- Blackpool
- Liverpūle
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- FC United of Manchester
Ja jūs vēlētos atrast visas komandas, kas sākās ar Mančesteru, jūs izmantotu šādu sintaksi:
Grep Mančestras komandas
Iepriekšminētā komanda atgriezīsies Manchester City un Manchester United, bet ne FC United of Manchester.
Alternatīvi jūs varat atrast visas komandas, kas beidzas ar United, izmantojot šādu sintaksi:
grep United $ komandas
Iepriekšminētā komanda atgriezīsies Manchester United un Newcastle United, bet ne FC United of Manchester.
04 no 09
Atbilstošo skaitļu skaitīšana, izmantojot grep
Ja jūs nevēlaties atgriezt faktiskās līnijas, kas atbilst modelim, izmantojot grep, bet jūs vienkārši vēlaties uzzināt, cik daudz ir, jūs varat izmantot šādu sintaksi:
grep-c modelis inputfile
Ja modelis tika saskaņots divreiz, tad numurs 2 tiks atgriezts.
05 no 09
Atrodiet visus noteikumus, kas neatbilst, izmantojot grep
Iedomājieties, ka jums ir vietu nosaukumu saraksts ar šādām valstīm:
- aberdeen skotlande
- glasgow skotlande
- Liverpūles Anglija
- Colwyn līcis
- Londona Anglija
Jūs, iespējams, esat pamanījis, ka Colwyn līcim nav nevienas asociētas valsts.
Lai meklētu visas vietas ar valsti, jūs varētu izmantot šādu sintaksi:
grep zemes $ vietas
Rezultāti atgriežas visās vietās, izņemot Colwyn līcī.
Tas acīmredzami darbojas tikai vietām, kas beidzas ar zemi (gandrīz zinātniski).
Jūs varat mainīt atlasi, izmantojot šādu sintaksi:
grep -v zeme $ vietas
Tas atrastu visas vietas, kas nebeidzās ar zemi.
06 no 09
Kā atrast tukšās līnijas failos, izmantojot grep
Iedomājieties, ka jums ir ievades fails, ko lieto trešās puses lietojumprogramma, kas pārtrauc lasīt failu, kad tā atrod tukšu rindu šādi:
- aberdeen skotlande
- invernesa skotlande
- Liverpūles Anglija
- Colwyn līča velsa
Kad lietojumprogramma nokļūst līnijā pēc liverpūles, tā pietrūks lasījumam, tāpēc kolvīna līcis ir pilnībā izlaists.
Jūs varat izmantot grep, lai meklētu tukšas rindas ar šādu sintaksi:
grep ^ $ vietas
Diemžēl tas nav īpaši noderīgi, jo tas vienkārši atgriež tukšās rindiņas.
Jūs, protams, varēsiet noskaidrot tukšo rindu skaitu kā pārbaudi, lai pārliecinātos, vai fails ir derīgs šādi:
grep-c ^ $ vietas
Tomēr būtu lietderīgāk zināt līniju numurus, kuriem ir tukša līnija, lai tos varētu aizstāt. To var izdarīt ar šādu komandu:
grep-n ^ $ vietas
07 no 09
Kā meklēt virknes augšējā vai apakšējā rindiņā ar grep
Izmantojot grep, jūs varat noteikt, kuras rindas failā ir lielie rakstzīmes, izmantojot šādu sintaksi:
grep "[AZ]" faila nosaukums
Kvadrātiekavas [] ļauj jums noteikt rakstzīmju diapazonu. Iepriekš minētajā piemērā tas atbilst jebkuram simbolam, kas ir no A līdz Z.
Tādēļ, lai atbilstu mazajiem burtiem, varat izmantot šādu sintaksi:
grep '[az]' faila nosaukums
Ja vēlaties saskaņot tikai burtus, nevis ciparus vai citus simbolus, varat izmantot šādu sintaksi:
grep '[a-zA-Z]' filename
To var izdarīt ar šādiem numuriem:
grep '[0-9]' faila nosaukums
08 no 09
Meklējat atkārtotus modeļus, izmantojot grep
Lai meklētu atkārtotu modeli, varat izmantot cirtainas iekavas {}.
Iedomājieties, ka jums ir fails ar tālruņa numuriem:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Jūs zināt, ka skaitļa pirmajai daļai jābūt trīs cipariem un vēlaties atrast līnijas, kas neatbilst šim modelim.
No iepriekšējā piemēra jūs zināt, ka [0-9] atgriež visus numurus failā.
Šajā gadījumā mēs vēlamies, lai līnijas, kas sākas ar trim numuriem, kam seko defise (-). To var izdarīt ar šādu sintaksi:
grep "^ [0-9] [0-9] [0-9] -" cipari
Kā mēs zinām no iepriekšējiem piemēriem, karats (^) nozīmē, ka līnijai jāsākas ar šādu modeli.
[0-9] meklē jebkuru skaitli no 0 līdz 9. Tā kā tas ir iekļauts trīs reizes, tas atbilst 3 cipariem. Visbeidzot, ir defise, lai apzīmētu, ka defisam ir jāpieņem trīs skaitļi.
Izmantojot cirvīšu skavu, jūs varat padarīt meklēšanu mazāku šādi:
grep "^ [0-9] \ {3 \} -" cipari
Slīpsvītra izlaiž {bracket tā, lai tā darbotos kā daļa no regulārās izteiksmes, bet pēc būtības tas ir [0-9] {3}, kas nozīmē jebkuru skaitu no 0 līdz 9 trīs reizes.
Liektās skavas var izmantot arī šādi:
{5,10}
{5,}
{5,10} nozīmē, ka meklētais raksturs jāatkārto vismaz 5 reizes, bet ne vairāk kā 10, savukārt {5,} simbols ir jāatkārto vismaz 5 reizes, bet tas var būt lielāks par to.
09 no 09
Izmantojot izvadi no citām komandām, izmantojot grep
Līdz šim mēs esam apskatījuši modeļu saskaņošanu atsevišķos failos, bet grep var izmantot izvadi no citām komandām kā izejmateriālu paraugu saskaņošanai.
Lielisks piemērs tam ir izmantot komandu ps, kurā uzskaitīti aktīvie procesi.
Piemēram, palaidiet šādu komandu:
ps -ef
Tiks parādīti visi jūsu sistēmā esošie procesi.
Jūs varat izmantot grep, lai meklētu konkrētu darbības procesu, šādi:
ps -ef | grep firefox