Įvadas
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 aš parodysiu jums keletą pavyzdžių, kurie padės suprasti grep komandą.
01 iš 09
Kaip 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 knygos
Bus 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".
Atkreipkite dėmesį į tai, kad paieška yra pažymėta didžiosiomis raidėmis, taigi, jei vienam iš pavadinimų būtų "a", o ne "The", tai nebūtų buvę grąžinta.
Norėdami ignoruoti bylą, galite pridėti šį jungiklį:
knygos "grep" - negoryje
Taip pat galite naudoti -i jungiklį taip:
grep-i knygos
02 iš 09
Ieš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:
Aberdeen
Aberystwyth
aberlour
inverurie
Inverness
Newburgh
naujas elnias
naujas galloway
glasgow
Edinburgas
Jei 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ą about.com, galite tiesiog ieškoti naudodami šį sintaksę:
grep * apie * domainnames
Aukšč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 domainnames
Tai veiktų gerai, jei nebūtų domeno su tokiu pavadinimu:
aboutycom.com
Norėdami iš tikrųjų ieškoti termino about.com, turėtumėte ištrinti tašką taip:
grep * apie \ .com domainnames
Galutinė pakaitalas, rodantis jus, yra klausimo ženklas, kuris reiškia nulį ar vieną simbolį.
Pavyzdžiui:
grepber vietovių pavadinimai
Pirmiau minėta komanda grįš Aberdiną, Aberystwythą ar net Berwicką.
03 iš 09
Ieš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 komandos
Pirmiau minėta komanda grįš "Manchester City" ir "Manchester United", bet ne "FC United of Manchester".
Arba galite rasti visas komandas, kurios baigiasi "United", naudojant tokį sintaksę:
grep United $ komandos
Pirmiau minėta komanda grįš "Manchester United" ir "Newcastle United", bet ne "FC United of Manchester".
04 iš 09
Skaič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 failas
Jei modelis buvo suderintas du kartus, numeris 2 bus grąžintas.
05 iš 09
Ieškoti visų sąlygų, kurios nesuderina naudodamos grep
Įsivaizduokite, kad turite vietovardžių sąrašą su nurodytomis šalimis:
- Aberdeen Scotland
- Glazgas Škotija
- Liverpulio 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 $ places
Rezultatai grąžinami visose vietose, išskyrus Colwyn įlanką.
Tai akivaizdžiai veikia tik vietose, kurios baigiasi žeme (vargu ar mokslinė).
Galite keisti parinktį naudodami šią sintaksę:
grep -v land $ places
Tai surastų visas vietas, kurios nesibaigė žeme.
06 iš 09
Kaip 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ų
07 iš 09
Kaip 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 "[AZ]" failo vardas
Laukinė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 '[az]' failo vardas
Jei norite susieti tik raides, o ne skaitinius ar kitus simbolius, galite naudoti tokį sintaksę:
grep "[a-zA-Z]" failo vardas
Galite padaryti tą patį su skaičiais taip:
grep '[0-9]' failo vardas
08 iš 09
Ieš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čiai
Kaip 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čiai
Vertikalusis 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ą.
09 iš 09
Naudojimas 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-ef
Bus rodomi visi jūsų sistemoje vykdomi procesai.
Galite naudoti grep, norėdami ieškoti konkretaus paleidimo proceso taip:
ps -ef | grep firefox