Pavyzdys naudoja "Linux grep Command"

Į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

"Linux grep Command".

Įsivaizduokite, kad turite tekstinį failą, pavadintą knygomis su tokiais vaikų knygų pavadinimais:

Norėdami rasti visas knygas pavadinimu "The", naudokite šį sintaksę:

grep knygos

Bus grąžinami šie rezultatai:

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šą

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:

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:

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:

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:

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:

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

Santrauka

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ą.