Linux grep komandas lietojuma piemēri
Linux grep komanda tiek izmantota kā ievades filtrēšanas metode. GREP apzīmē globālo regulāro izteiksmju printeri, un tāpēc, lai to izmantotu efektīvi, jums ir jābūt zināšanām par regulārajām izteiksmēm.
Šajā rakstā jūs uzzināsit vairākus piemērus, kas palīdzēs izprast grep komandu.
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
- Sarkangalvīte
- Pīters Pens
- Zeltīti un Trīs lāči
- Sniegbaltīte un septiņi rūķīši
- Pinnochio
- Kaķis cepurē
- Trīs sivēntiņi
- Grufalo
- Čārlijs un šokolādes fabrika
Lai atrastu visas grāmatas, kuru nosaukumā ir vārds "The", izmantojiet šādu sintaksi:
grep Grāmatas.
Tiks atgriezti šādi rezultāti:
Zeltīti un Trīs lāči
Sniegbaltīte un septiņi rūķīši
Kaķis cepurē
Trīs sivēntiņi
Grufalo
Čārlijs un šokolādes fabrika.
Katrā gadījumā vārds "The" tiks izcelts.
Meklēšana ir reģistrjutīga, tāpēc, ja vienā no nosaukumiem būtu "the", nevis "The", tas netiktu atgriezts.
Lai ignorētu gadījumu, varat pievienot šādu slēdzi:
grep the books -- ignore-case.
Varat arī izmantot slēdzi -i šādi:
grep -i grāmatas.
Meklējiet failā virkni, izmantojot regulārās izteiksmes
Komanda grep ir ļoti spēcīga. Rezultātu filtrēšanai varat izmantot daudzas modeļu saskaņošanas metodes.
Šajā piemērā mēs parādīsim, kā failā meklēt virkni, izmantojot aizstājējzīmes.
Iedomājieties, ka jums ir fails ar nosaukumu Vietas ar šādiem skotu vietu nosaukumiem:
Aberdīna
Aberystwyth
aberlour
inverurie
invernesa
Ņūburga
jauns briedis
jauna Galloway
Glāzgova
Edinburga.
Ja vēlaties atrast visas vietas, kuru nosaukumā ir inver, izmantojiet šādu sintaksi:
grep inver* vietās.
Zvaigznītes (*) rakstzīme nedarbojas gluži tāpat kā parastajā Bash. Grep kontekstā, kas nodarbojas ar regulārām izteiksmēm, zvaigznīte darbojas atšķirīgi. Tā vietā, lai saskaņotu jebkuru rakstzīmi vai nevienu rakstzīmi, piemēram, Bash, tas atbilst ievadītajam rakstam, kā arī jebkādiem turpmākiem šī raksta atkārtojumiem.
Iepriekš minētajā piemērā tas atbilst:
inverurie
invernesa.
jo tajos abos ir ievadītais raksts "inver" un nulle papildu šī raksta atkārtojumu. Lai to atkal redzētu skaidrāk, pievienojiet:
atkārtotinverinverinver.
uz sarakstu. Nē, tam nav lielas jēgas, bet tas parādīs, kā darbojas zvaigznīte. Mēģiniet palaist komandu vēlreiz.
grep inver* vietās.
Vai redzat jauno līniju? Bašā tas nedarbosies, bet šeit tas darbojas.
Lai padarītu lietas vēl dīvainākas, palaidiet komandu bez zvaigznītes.
grep inver vietas.
Rezultāti ir vienādi. Pēc noklusējuma grep meklēs modeli jebkurā vietā, kur tas parādās teksta virknē. Tas arī neatšķiras, cik reizes tas parādās.
Vēl viena aizstājējzīme, ko varat izmantot, ir punkts (.). Varat to izmantot, lai saskaņotu vienu burtu.
grep inver.r vietās.
Iepriekš minētā komanda atrastu vietas, ko sauc par inverurie un inverary, bet neatradīs invereerie, jo starp diviem r var būt tikai viena aizstājējzīme, ko apzīmē ar vienu punktu.
Perioda aizstājējzīme ir noderīga, taču tā var radīt problēmas, ja tāda ir iekļauta meklējamajā tekstā.
Piemēram, apskatiet šo domēna vārdu sarakstu.
- linux.lifewire.com
- pcsupport.lifewire.com
- mp3.lifewire.com
- minecraft.lifewire.com
- androidgames.lifewire.com
- netforbeginners.lifewire.com
- dailylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
- fakesite.lifewire1com.com
Lai atrastu visus lifewire.com vietrāžus URL, varat meklēt, izmantojot šādu sintaksi:
grep .com domēna vārdi.
Iepriekš minētā komanda nokristu, ja sarakstā būtu šāds nosaukums:
dailylinuxuser.com.
Tāpēc varat izmēģināt šādu sintaksi:
grep lifewire.com domēna vārdi.
Tas darbotos labi, ja vien nebūtu domēna ar šādu nosaukumu:
fakesite.lifewire1com.com.
Lai patiešām meklētu vārdu lifewire.com, jums ir jāizvairās no punkta šādi:
grep lifewire\\.com domēna vārdi.
Pēdējā aizstājējzīme, kas jums jāparāda, ir jautājuma zīme, kas apzīmē nulli vai vienu rakstzīmi.
Piemēram:
grep -E ?ber vietvārdi.
Iepriekš minētā komanda atgrieztu Aberdeen, Aberystwyth vai pat Berwick, ja tā būtu sarakstā. Ievērojiet arī papildu “-E” karogu. Greps neatpazīs? rakstzīmi, neiespējojot paplašinātu regulārās izteiksmes atbalstu.
Meklējiet virknes rindas sākumā un beigās, izmantojot grep
Karātu (^) un dolāra ($) simbols ļauj meklēt rakstus rindu sākumā un beigās.
Iedomājieties, ka jums ir fails ar nosaukumu futbols ar šādiem komandu nosaukumiem:
- Blekpūla
- Liverpūle
- Mančestras pilsēta
- Lesteras pilsēta
- Manchester United
- Ņūkāslas United
- Mančestras FC United
Ja vēlaties atrast visas komandas, kas sākās ar Mančestru, izmantojiet šādu sintaksi:
grep ^Mančestras komandas.
Iepriekš minētā komanda atgrieztu Manchester City un Manchester United, bet ne FC United Of Manchester.
Varat arī atrast visas komandas, kas beidzas ar United, izmantojot šādu sintaksi:
grep United$ komandas.
Iepriekš minētā komanda atgrieztos Manchester United un Newcastle United, bet ne FC United Of Manchester.
Atbilstību skaita skaitīšana, izmantojot grep
Ja nevēlaties atgriezt faktiskās līnijas, kas atbilst paraugam, izmantojot grep, bet vēlaties tikai zināt, cik to ir, varat izmantot šādu sintaksi:
grep -c raksta ievades fails.
Ja modelis tika saskaņots divas reizes, tiek atgriezts skaitlis 2.
Visu neatbilstošo terminu atrašana, izmantojot grep
Iedomājieties, ka jums ir vietvārdu saraksts ar šādām valstīm:
- aberdīna Skotija
- glāzgova, Skotija
- Liverpūle Anglija
- Kolvinas līcis
- londona Anglija
Iespējams, esat pamanījis, ka Kolvinas līcī nav ar to saistīta neviena valsts.
Lai meklētu visas vietas ar valsti, varat izmantot šādu sintaksi:
grep zeme$ vietas.
Rezultāti tiks atgriezti visās vietās, izņemot Kolvinas līci.
Tas acīmredzami darbojas tikai vietās, kas beidzas ar zemi (diez vai zinātniski).
Varat apgriezt atlasi, izmantojot šādu sintaksi:
grep -v zeme$ vietas.
Tas atrastu visas vietas, kas nebeidzas ar zemi.
Kā atrast tukšas rindas failos, izmantojot grep
Iedomājieties, ka jums ir ievades fails, ko izmanto trešās puses lietojumprogramma, kas pārtrauc faila lasīšanu, kad tā atrod tukšu rindiņu, kā norādīts tālāk:
- aberdīna Skotija
- Invernesa Skotija
- Liverpūle Anglija
- Colwyn Bay Wales
Kad lietojumprogramma nonāk rindā pēc Liverpool, tā pārtrauks nolasīšanu, kas nozīmē, ka Colwyn Bay ir pilnībā izlaista.
Varat izmantot grep, lai meklētu tukšas rindiņas ar šādu sintaksi:
grep ^$ vietas.
Tas nav īpaši noderīgi, jo tas tikai atgriež tukšās rindas.
Jūs, protams, varat iegūt tukšo rindu skaitu, lai pārbaudītu, vai fails ir derīgs, kā norādīts tālāk.
grep -c ^$ vietas.
Tomēr būtu lietderīgāk zināt rindu numurus, kuriem ir tukša rinda, lai jūs varētu tos aizstāt. To var izdarīt ar šādu komandu:
grep -n ^$ vietas.
Kā meklēt lielo vai mazo burtu virknes, izmantojot grep
Izmantojot grep, varat noteikt, kurās faila rindās ir lielie burti, izmantojot šādu sintaksi:
grep '[A-Z]' faila nosaukums.
Kvadrātiekavas [] ļauj noteikt rakstzīmju diapazonu. Iepriekš minētajā piemērā tas atbilst jebkurai rakstzīmei, kas atrodas starp A un Z.
Tāpēc, lai atbilstu mazajiem burtiem, varat izmantot šādu sintaksi:
grep '[a-z]' faila nosaukums.
Ja vēlaties saskaņot tikai burtus, nevis ciparus vai citus simbolus, varat izmantot šādu sintaksi:
grep '[a-zA-Z]' faila nosaukums.
To pašu var izdarīt ar cipariem šādi:
grep '[0-9]' faila nosaukums.
Atkārtotu modeļu meklēšana, izmantojot grep
Varat izmantot krokainas iekavas {}, lai meklētu atkārtotu rakstu.
Iedomājieties, ka jums ir šāds 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 ir jābūt trīs cipariem, un vēlaties atrast rindas, kas neatbilst šim rakstam.
No iepriekšējā piemēra jūs zināt, ka [0-9] atgriež visus skaitļus failā.
Šajā gadījumā mēs vēlamies rindas, kas sākas ar trim cipariem, kam seko defise (-). To var izdarīt, izmantojot šādu sintaksi:
grep "^[0-9][0-9][0-9]-" cipari.
Kā zināms no iepriekšējiem piemēriem, karāts (^) nozīmē, ka līnijai jāsākas ar šādu rakstu.
[0-9] meklēs jebkuru skaitli no 0 līdz 9. Tā kā tas ir iekļauts trīs reizes, tas atbilst 3 cipariem. Visbeidzot, ir defise, kas norāda, ka defisei ir jābūt pēc trim skaitļiem.
Izmantojot cirtainās iekavas, varat samazināt meklēšanu šādi:
grep "^[0-9]\{3\}-" cipari.
Slīpsvītra izkļūst no { iekavas, lai tā darbotos kā daļa no regulārās izteiksmes, bet būtībā tas ir [0-9]{3}, kas nozīmē jebkuru skaitli no 0 līdz 9 trīs reizes.
Cirtainās iekavas var izmantot arī šādi:
{5,10}
{5,}
{5,10} nozīmē, ka meklētā rakstzīme ir jāatkārto vismaz 5 reizes, bet ne vairāk kā 10, savukārt {5,} nozīmē, ka rakstzīme ir jāatkārto vismaz 5 reizes, bet tā var būt vairāk nekā ka.
Citu komandu izvades izmantošana, izmantojot grep
Līdz šim esam aplūkojuši modeļu saskaņošanu atsevišķos failos, bet grep var izmantot citu komandu izvadi kā ievadi raksta saskaņošanai.
Lielisks piemērs tam ir komandas ps izmantošana, kurā ir uzskaitīti aktīvie procesi.
Piemēram, palaidiet šādu komandu:
ps -ef.
Tiks parādīti visi jūsu sistēmā strādājošie procesi.
Varat izmantot grep, lai meklētu noteiktu darbības procesu šādi:
ps -ef | grep firefox.
Kopsavilkums
Komanda grep ir būtiska Linux komandu, un to ir vērts apgūt, jo tas ievērojami atvieglos jūsu dzīvi, meklējot failus un procesus, izmantojot termināli.