Linux grep komanda naudojama kaip įvesties filtravimo metodas. GREP reiškia "Global Regular Expression" spausdintuvą, todėl, norint jį efektyviai naudoti, turėtumėte turėti tam tikrų žinių apie įprastas išraiškas.
Šiame straipsnyje jūs sužinosite keletą pavyzdžių, kurie padės suprasti grep komandą.
01 iš 09Kaip ieškoti eilutės failo naudojant GREP

Įsivaizduokite, kad turite tekstinį failą, pavadintą knygomis su tokiais vaikų knygų pavadinimais:
- Robinas Hudas
- Raudonkepuraitė
- Piteris Penas
- Goldilokai ir trys lokiai
- Snieguolė ir septyni nykštukai
- Pinnochio
- Katė kepurėje
- Trys mažos kiaulės
- Gruffalo
- Čarlis ir šokolado fabrikas
Norėdami rasti visas knygas pavadinimu "The", naudokite šį sintaksę:
grep knygosBus grąžinami šie rezultatai:
- Goldilokai ir trys lokiai
- Snieguolė ir septyni nykštukai
- Katė kepurėje
- Trys mažos kiaulės
- Gruffalo
- Čarlis ir šokolado fabrikas
Kiekvienu atveju bus paryškintas žodis "The".
Paieška yra didžiosios ir mažosios raidės, taigi, jei vienam iš pavadinimų būtų ", o ne" The ", jis nebūtų grąžintas.
Norėdami ignoruoti bylą, galite pridėti šį jungiklį:
knygos "grep" - negoryjeTaip pat galite naudoti -i jungiklį taip:
Tęsti skaitymą žemiau
02 iš 09Ieškoti failo eilutėje, naudojant laukinius simbolius
"Grep" komanda yra labai galinga. Norėdami filtruoti rezultatus, galite naudoti daugybę modeliavimo metodų.
Šiame pavyzdyje parodysiu, kaip ieškoti eilutės failo, naudojant pakaitos simbolius.
Įsivaizduokite, kad turite rinkmeną, pavadintą vietomis su šiais vietovardžiais:
AberdeenAberystwythaberlourinverurieInvernessNewburghnaujas elniasnaujas gallowayglasgowEdinburgasJei norite rasti visas vietas su invertu pavadinimu, naudokite šį sintaksę:
grep inver * vietoseŽvaigždute (*) pakaitos simbolis reiškia 0 arba daugelį. Todėl, jei turite vietą, vadinamą invernu arba vietą, vadinamą Inverness, tuomet abi bus grąžintos.
Kitas pakaitos simbolis, kurį galite naudoti, yra periodas (.). Galite naudoti tai, kad atitiktumėte vieną raidę.
grep inver.r vietųPirmiau aprašyta komanda ras vietoves, vadinamas inverurie ir inverary, bet nebūtų rasti invereerie, nes tarp dviejų r, tarp jų ir viename etape, gali būti tik viena užkarda.
Periodo pakaitos simbolis yra naudingas, tačiau jis gali sukelti problemų, jei turite vieną paieškos teksto dalį.
Pvz., Pažvelkite į šį domenų vardų sąrašą
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- kasdienlinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Norėdami rasti viską apie .com, galite tiesiog ieškoti naudodami šį sintaksę:
grep * apie * domainnamesAukščiau pateikta komanda sumažėtų, jei šiame sąraše būtų toks pavadinimas:
- everydaylinuxuser.com/about.html
Todėl galėtumėte išbandyti tokį sintaksę:
grep * about.com domainnamesTai veiktų gerai, jei nebūtų domeno su tokiu pavadinimu:
aboutycom.comNorėdami iš tikrųjų ieškoti termino about.com, turėtumėte ištrinti tašką taip:
grep * apie .com domainnamesGalutinė pakaitalas, rodantis jus, yra klausimo ženklas, kuris reiškia nulį ar vieną simbolį.
Pavyzdžiui:
grepber vietovių pavadinimaiPirmiau minėta komanda grįš Aberdiną, Aberystwythą ar net Berwicką.
Tęsti skaitymą žemiau
03 iš 09Ieškoti eilučių pradžioje ir pabaigoje linijos naudojant grep
Simbolis "karatas" (^) ir doleris ($) leidžia ieškoti raštų linijų pradžioje ir pabaigoje.
Įsivaizduokite, kad turite rinkmeną, pavadintą "futbolas", nurodydami šiuos komandos pavadinimus:
- Blackpool
- Liverpulis
- Mančesterio miestas
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Jei norėjote rasti visas komandas, kurios prasidėjo Mančesteryje, naudokitės šia sintaksė:
Grep Mančesterio komandosPirmiau minėta komanda grįš "Manchester City" ir "Manchester United", bet ne "FC United of Manchester".
Arba galite rasti visas komandas, baigusias United su šia sintaksė:
grep United $ komandosPirmiau minėta komanda grįš į "Manchester United" ir "Newcastle United", bet ne "FC United of Manchester".
04 iš 09Skaičiavimas atitikčių skaičiaus naudojant grep
Jei nenorite grąžinti faktinių eilučių, atitinkančių modelį naudodamiesi grep, bet jūs tiesiog norite sužinoti, kiek jų yra, galite naudoti šį sintaksę:
grep-c modelio failasJei modelis buvo suderintas du kartus, numeris 2 bus grąžintas.
Tęsti skaitymą žemiau
05 iš 09Ieškoti visų sąlygų, kurios nesuderina naudodamos grep
Įsivaizduokite, kad turite vietovardžių sąrašą su nurodytomis šalimis:
- Aberdeen Škotija
- Glazgas Škotija
- Liverpulis Anglija
- Colwyn įlanka
- Londonas, Anglija
Galbūt pastebėjote, kad Kolvino įlankoje nėra su ja susijusios šalys.
Norėdami ieškoti visų vietų su šalimi, galite naudoti šį sintaksę:
grep land $ placesRezultatai grąžinami visose vietose, išskyrus Colwyn įlanką.
Tai akivaizdžiai veikia tik vietose, kurios baigiasi žeme (vargu ar mokslinė).
Galite pakeisti pasirinkimą naudodami šią sintaksę:
grep -v land $ placesTai surastų visas vietas, kurios nesibaigė žeme.
06 iš 09Kaip rasti tuščias eilutes failuose naudojant grep
Įsivaizduokite, kad turite įvesties failą, kurį naudoja trečiosios šalies programa, kuri nebegali skaityti failo, kai ji nustato tuščią eilutę taip:
- Aberdeen Scotland
- Invernesas Škotija
- Liverpulio Anglija
- Kolvino įlanka
Kai programa pateks į liniją po Liverpulio, ji nustos skaityti, todėl "Colwyn" įlankoje bus visiškai praleistas.
Galite naudoti grep, norėdami ieškoti tuščių eilučių su šia sintaksė:
grep ^ $ vietųDeja, tai nėra ypač naudinga, nes ji tiesiog grąžina tuščias eilutes.
Žinoma, jūs galite gauti skaičių tuščių eilučių, kaip patikrinti, ar failas galioja taip:
grep-c ^ $ vietųVis dėlto būtų naudingiau žinoti eilučių numerius, kurie turi tuščią eilutę, kad galėtumėte juos pakeisti. Tai galite padaryti naudodami šią komandą:
grep-n ^ $ vietųTęsti skaitymą žemiau
07 iš 09Kaip ieškoti didžiųjų ar mažųjų raidžių eilučių naudojant grep
Naudojant grep galite nustatyti, kurios eilutės failo yra didžiosios raidės naudojant šią sintaksę:
grep "A-Z" failo vardasLaukinės skliautės leidžia nustatyti simbolių asortimentą. Ankstesniame pavyzdyje jis atitinka bet kurį simbolį, kuris yra tarp A ir Z.
Todėl, kad atitiktų mažos raidės, galite naudoti šį sintaksę:
grep "a-z" failo vardasJei norite susieti tik raides, o ne skaitinius ar kitus simbolius, galite naudoti tokį sintaksę:
grep "a-zA-Z" failo vardasGalite padaryti tą patį su skaičiais taip:
grep '0-9' failo vardas 08 iš 09Ieškote kartotinių modelių, naudojant grep
Jei norite ieškoti pakartojančio modelio, galite naudoti garbanotas skliaustus {}.
Įsivaizduokite, kad turite failą su telefono numeriais:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Jūs žinote, kad pirmoji numerio dalis turi būti trys skaitmenys ir norite rasti linijas, kurios neatitinka šio modelio.
Iš ankstesnio pavyzdžio žinote, kad 0-9 grąžina visus numerius rinkmenoje.
Šiuo atveju mes norime eilučių, kurios prasideda trim skaičiais, po kurių yra brūkšnelis (-). Tai galite padaryti naudodami šią sintaksę:
grep "^ 0-9 0-9 0-9 -" skaičiaiKaip mes žinome iš ankstesnių pavyzdžių, karatas (^) reiškia, kad linija turi prasidėti šia lentele.
0-9 ieškos bet kokio skaičiaus tarp 0 ir 9. Kadangi tai yra tris kartus, jis atitinka 3 skaičiai. Galiausiai yra brūkšnys, rodantis, kad brūkšneliu turi būti trys skaičiai.
Naudodamiesi garbanotomis skliaustėmis, galite atlikti mažesnę paiešką taip:
grep "^ 0-9 (3 ) -" skaičiaiVertikalusis brūkšnys ištrūksta iš {bracket, kad jis veiktų kaip reguliaraus išraiškos dalis, bet iš esmės tai yra 0-9 {3}, o tai reiškia bet kurį skaičių nuo 0 iki 9 tris kartus.
Garbanotieji skliautai taip pat gali būti naudojami taip:
{5,10}{5,}{5,10} reiškia, kad ieškomas simbolis turi būti kartojamas ne mažiau kaip 5 kartus, bet ne daugiau kaip 10, o {5,} reiškia, kad simbolis turi būti kartojamas ne mažiau kaip 5 kartus, bet jis gali būti didesnis už tą.
Tęsti skaitymą žemiau
09 iš 09Naudojimas išvesties iš kitų komandų naudojant grep
Kol kas mes pažvelgė į modelio atitikimą atskiruose failuose, bet grep gali naudoti kitų komandų išvestį kaip modelio atitikimo įvestį.
Puikus pavyzdys yra ps komanda, kurioje išvardijami aktyvūs procesai.
Pavyzdžiui paleiskite šią komandą:
ps-efBus rodomi visi jūsų sistemoje vykdomi procesai.
Galite naudoti grep, norėdami ieškoti konkretaus paleidimo proceso taip:
ps -ef | grep firefoxSantrauka
Grep komanda yra pagrindinė Linux komanda, ir tai yra ta, kuri verta mokytis, nes tai padės padaryti jūsų gyvenimą daug lengviau ieškant failų ir procesų naudojant terminalą.












