Paano Magamit ang grep Command sa Linux

Ang Linux grep Ang utos ay isang string at pattern na tumutugma sa utility na nagpapakita ng mga tumutugma na linya mula sa maraming mga file. Gumagawa din ito sa piped output mula sa iba pang mga utos. Ipinapakita namin sa iyo kung paano.

Ang Kuwento sa Likod ng grep

Ang grep Ang utos ay sikat sa mga lupon ng Linux at Unix para sa tatlong kadahilanan. Una, ito ay napakalaking kapaki-pakinabang. Pangalawa, ang kayamanan ng mga pagpipilian ay maaaring maging napakalaki. Pangatlo, isinulat ito sa magdamag upang masiyahan ang isang partikular na pangangailangan. Ang unang dalawa ay putok sa; ang pangatlo ay bahagyang naka-off.

Kinuha ni Ken Thompson ang regular na mga kakayahan sa paghahanap ng expression mula sa ed editor (binibigkas na ee-dee) at lumikha ng isang maliit na programa — para sa kanyang sariling paggamit — upang maghanap sa pamamagitan ng mga file ng teksto. Ang kanyang pinuno ng departamento sa Bell Labs na si Doug Mcilroy, ay lumapit kay Thompson at inilarawan ang problemang kinakaharap ng isa niyang kasamahan na si Lee McMahon.

Sinusubukan ni McMahon na makilala ang mga may-akda ng mga papeles na Pederalista sa pamamagitan ng pagsusuri sa tekstuwal. Kailangan niya ng isang tool na maaaring maghanap para sa mga parirala at mga string sa loob ng mga file ng teksto. Ginugol ni Thompson ang halos isang oras sa gabing iyon sa paggawa ng kanyang tool na isang pangkalahatang utility na maaaring magamit ng iba at palitan itong pangalan bilang grep. Kinuha niya ang pangalan sa ed utos ng utos g / re / p , na isinasalin bilang "pandaigdigang regular na paghahanap ng expression."

Maaari mong panoorin si Thompson na nakikipag-usap kay Brian Kernighan tungkol sa pagsilang ni grep.

Mga Simpleng Paghahanap Sa grep

Upang maghanap para sa isang string sa loob ng isang file, ipasa ang termino para sa paghahanap at ang pangalan ng file sa linya ng utos:

Ipinapakita ang mga linya ng pagtutugma. Sa kasong ito, ito ay isang solong linya. Ang pagtutugma ng teksto ay naka-highlight. Dahil ito sa karamihan ng mga pamamahagi grep ay nai-alias sa:

alias grep = "grep --colour = auto"

Tingnan natin ang mga resulta kung saan maraming mga linya ang tumutugma. Hahanapin namin ang salitang "Karaniwan" sa isang file ng log ng application. Dahil hindi namin matandaan kung ang salita ay nasa maliit na file sa log file, gagamitin namin ang -ako (Huwag pansinin ang kaso) na pagpipilian:

grep -i Average geek-1.log

Ang bawat linya ng pagtutugma ay ipinapakita, kasama ang pagtutugma ng teksto na naka-highlight sa bawat isa.

Maaari naming ipakita ang mga hindi tumutugma na linya sa pamamagitan ng paggamit ng pagpipiliang -v (invert match).

grep -v Mem geek-1.log

Walang pagha-highlight dahil ito ang mga hindi tumutugma na linya.

Maaari tayong maging sanhi grep upang maging tahimik na tuluyan. Ang resulta ay naipasa sa shell bilang isang halaga ng pagbabalik mula sa grep. Ang isang resulta ng zero ay nangangahulugang ang string ay natagpuan, at isang resulta ng isang ibig sabihin nito ay hindi natagpuan Maaari naming suriin ang return code gamit ang $? mga espesyal na parameter:

grep -q average geek-1.log
echo $?
grep -q howtogeek geek-1.log
echo $?

Mga Recursive na Paghahanap Sa grep

Upang maghanap sa pamamagitan ng mga nakapaloob na direktoryo at subdirectory, gamitin ang pagpipiliang -r (recursive). Tandaan na hindi ka nagbibigay ng isang pangalan ng file sa linya ng utos, dapat kang magbigay ng isang landas. Narito kami naghahanap sa kasalukuyang direktoryo na "." at anumang mga subdirectory:

grep -r -i memfree.

Kasama sa output ang direktoryo at filename ng bawat tumutugma na linya.

Kaya nating gumawa nggrep sundin ang mga simbolikong link sa pamamagitan ng paggamit ng -R (Recursive dereferance) na pagpipilian. Mayroon kaming isang simbolikong link sa direktoryong ito, na tinawag mga log-folder. Itinuturo nito sa / home / dave / logs.

ls -l logs-folder

Ulitin natin ang aming huling paghahanap gamit ang-R (Recursive dereferance) na pagpipilian:

grep -R -i memfree.

Sinusundan ang simbolikong link at ang direktoryo na tinuturo nito ay hinanap ng grep ganun din

Naghahanap ng Buong Salita

Bilang default, grep tutugma sa isang linya kung ang target ng paghahanap ay lilitaw kahit saan sa linyang iyon, kasama ang loob ng isa pang string. Tingnan ang halimbawang ito. Hahanapin namin ang salitang "libre."

grep -i libre geek-1.log

Ang mga resulta ay mga linya na may string na "libre" sa kanila, ngunit hindi sila magkakahiwalay na mga salita. Bahagi sila ng string na "MemFree."

Upang pilitin grep upang maitugma lamang ang magkakahiwalay na "mga salita", gamitin ang -w (salita regexp) na pagpipilian.

grep -w -i libre geek-1.log
echo $?

Sa oras na ito walang mga resulta dahil ang term na hinahanap na "libre" ay hindi lilitaw sa file bilang isang hiwalay na salita.

Paggamit ng Maramihang Mga Tuntunin sa Paghahanap

Ang -E Pinapayagan ka ng pagpipiliang (pinalawak na regexp) na maghanap para sa maraming mga salita. (Ang -E Pinalitan ng opsyon ang hindi na ginagamit egrep bersyon ng grep.)

Naghahanap ang utos na ito ng dalawang mga termino para sa paghahanap, "average" at "memfree."

grep -E -w -i "average | memfree" geek-1.log

Ang lahat ng mga tumutugmang linya ay ipinapakita para sa bawat isa sa mga term ng paghahanap.

Maaari ka ring maghanap para sa maraming mga term na hindi kinakailangang buong salita, ngunit maaari rin silang maging buong salita.

Ang -e Pinapayagan ka ng pagpipiliang (mga pattern) na gumamit ng maraming mga termino para sa paghahanap sa linya ng utos. Ginagamit namin ang regular na tampok na expression na bracket upang lumikha ng isang pattern sa paghahanap. Sinasabi nito grep upang maitugma ang alinman sa mga character na nilalaman sa loob ng mga bracket na "[]." Ibig sabihin nito grep ay tumutugma sa alinman sa "kB" o "KB" sa paghahanap nito.

Ang parehong mga string ay naitugma, at, sa katunayan, ang ilang mga linya ay naglalaman ng parehong mga string.

Pagtutugma ng Mga Linya na Eksakto

Ang-x (line regexp) ay tutugma lamang sa mga linya kung saan ang buong linya tumutugma sa termino para sa paghahanap. Maghanap tayo para sa isang stamp ng petsa at oras na alam nating lumilitaw isang beses lamang sa log file:

grep -x "20-Ene - 06 15:24:35" geek-1.log

Ang solong linya na tumutugma ay matatagpuan at ipinapakita.

Ang kabaligtaran nito ay ipinapakita lamang ang mga linya na huwag tugma Maaari itong maging kapaki-pakinabang kapag tinitingnan mo ang mga file ng pagsasaayos. Mahusay ang mga komento, ngunit kung minsan mahirap makita ang mga aktwal na setting sa kanilang lahat. Narito ang / etc / sudoers file:

Maaari naming epektibong i-filter ang mga linya ng komento tulad nito:

sudo grep -v "#" / etc / sudoers

Mas madali iyon i-parse.

Nagpapakita lamang ng Tugma na Teksto

Maaaring may isang okasyon kung hindi mo nais na makita ang buong linya ng pagtutugma, ang katugmang teksto lamang. Ang -o Ang pagpipiliang (tumutugma lamang) ay ginagawa lamang iyan.

grep -o MemFree geek-1.log

Ang display ay nabawasan sa pagpapakita lamang ng teksto na tumutugma sa termino para sa paghahanap, sa halip na ang buong linya ng pagtutugma.

Nagbibilang Sa grep

grep hindi lamang tungkol sa teksto, maaari rin itong magbigay ng impormasyong pang-numero. Kaya nating gumawa ng grep bilangin sa amin sa iba't ibang paraan. Kung nais naming malaman kung ilang beses lumilitaw ang isang termino para sa paghahanap sa isang file, maaari naming gamitin ang -c (bilangin) na pagpipilian.

grep -c average geek-1.log

grep Iniuulat na ang termino para sa paghahanap ay lumilitaw nang 240 beses sa file na ito.

Maaari kang gumawa grep ipakita ang numero ng linya para sa bawat linya ng pagtutugma sa pamamagitan ng paggamit ng -n (line number) na pagpipilian.

grep -n Jan geek-1.log

Ang numero ng linya para sa bawat linya na tumutugma ay ipinapakita sa simula ng linya.

Upang mabawasan ang bilang ng mga resulta na ipinakita, gamitin ang -m (max count) na pagpipilian. Malilimitahan namin ang output sa limang linya ng pagtutugma:

grep -m5 -n Jan geek-1.log

Pagdaragdag ng Context

Makakakita ng ilang mga karagdagang linya — posibleng mga linya na hindi tumutugma — para sa bawat linya ng pagtutugma ay madalas na kapaki-pakinabang. makakatulong ito na makilala kung alin sa mga katugmang linya ang iyong interes.

Upang ipakita ang ilang mga linya pagkatapos ng pagtutugma ng linya, gamitin ang pagpipiliang -A (pagkatapos ng konteksto). Humihiling kami ng tatlong linya sa halimbawang ito:

grep -A 3 -x "20-Ene-06 15:24:35" geek-1.log

Upang makita ang ilang mga linya mula bago ang pagtutugma ng linya, gamitin ang -B (konteksto bago) pagpipilian.

grep -B 3 -x "20-Ene-06 15:24:35" geek-1.log

At upang isama ang mga linya mula bago at pagkatapos ng pagtutugma ng linya gamitin ang -C (konteksto) na pagpipilian.

grep -C 3 -x "20-Ene-06 15:24:35" geek-1.log

Ipinapakita ang Mga Pagtutugma ng Mga File

Upang makita ang mga pangalan ng mga file na naglalaman ng termino para sa paghahanap, gamitin ang -l (Mga file na may tugma) na pagpipilian. Upang malaman kung aling mga file ng source code ng C ang naglalaman ng mga sanggunian sa sl.h header file, gamitin ang utos na ito:

grep -l "sl.h" * .c

Ang mga pangalan ng file ay nakalista, hindi ang mga tumutugma na linya.

At syempre, maaari tayong maghanap ng mga file na hindi naglalaman ng term ng paghahanap. Ang -L Ang pagpipiliang (mga file nang walang tugma) ay ginagawa lamang iyan.

grep -L "sl.h" * .c

Simula at Wakas ng mga Linya

Maaari nating pilitin grep upang ipakita lamang ang mga tugma na alinman sa simula o sa pagtatapos ng isang linya. Ang regular na operator ng ekspresyon na "^" ay tumutugma sa pagsisimula ng isang linya. Halos lahat ng mga linya sa loob ng log file ay maglalaman ng mga puwang, ngunit maghahanap kami para sa mga linya na may puwang bilang kanilang unang character:

grep "^" geek-1.log

Ang mga linya na mayroong puwang bilang unang tauhan — sa simula ng linya — ay ipinapakita.

Upang maitugma ang pagtatapos ng linya, gamitin ang "$" regular na operator ng ekspresyon. Hahanapin namin ang mga linya na nagtatapos sa "00."

grep "00 $" geek-1.log

Ipinapakita ng display ang mga linya na may "00" bilang kanilang huling mga character.

Paggamit ng Mga Pipe na may grep

Siyempre, maaari kang mag-input ng tubo sa grep , tubo ang output mula sa grep sa ibang programa, at mayroon grep matatagpuan sa gitna ng isang kadena ng tubo.

Sabihin nating nais nating makita ang lahat ng mga paglitaw ng string na "ExtractParameter" sa aming mga C source code file. Alam naming magkakaroon ng iilan, kaya't pinapasok namin ang output mas kaunti:

grep "ExtractParameter" * .c | mas kaunti

Ang output ay ipinakita sa mas kaunti.

Hinahayaan ka nitong pahina sa pamamagitan ng listahan ng file at upang magamit mas kaunti pasilidad sa paghahanap.

Kung pipino namin ang output mula sa grep sa wc at gamitin ang -l (Mga linya) na pagpipilian, maaari nating bilangin ang bilang ng mga linya sa mga file ng source code na naglalaman ng "ExtractParameter". (Maaari nating makamit ito gamit ang grep-c (Bilangin) na pagpipilian, ngunit ito ay isang maayos na paraan upang maipakita ang paglabas ng grep.)

grep "ExtractParameter" * .c | wc -l

Sa susunod na utos, piping namin ang output mula sa ls sa grep at piping ang output mula sa grep sa pag-uri-uriin . Inililista namin ang mga file sa kasalukuyang direktoryo, pinipili ang mga may string na "Ago" sa mga ito, at inaayos ang mga ito ayon sa laki ng file:

ls -l | grep "Ago" | pag-uuri + 4n

Tanggalin natin iyon:

  • ls -l: Magsagawa ng isang mahabang listahan ng format ng mga file na ginagamit ls.
  • grep "Ago": Piliin ang mga linya mula sa ls listahan na mayroong "Aug" sa kanila. Tandaan na mahahanap din nito ang mga file na may "Aug" sa kanilang mga pangalan.
  • pag-uuri + 4n: Pagbukud-bukurin ang output mula sa grep sa ika-apat na haligi (fileize).

Nakukuha namin ang isang pinagsunod-sunod na listahan ng lahat ng mga file na binago noong Agosto (anuman ang taon), sa pataas na pagkakasunud-sunod ng laki ng file.

KAUGNAYAN:Paano Gumamit ng Mga Pipe sa Linux

grep: Mas kaunti sa isang Utos, Higit pa sa isang kapanalig

grep ay isang kakila-kilabot na tool na magagamit mo. Nagsimula ito mula 1974 at patuloy pa rin itong lumalakas dahil kailangan natin kung ano ang ginagawa nito, at wala nang mas mahusay.

Pagkabit grep na may ilang mga regular na expression-fu talagang dadalhin ito sa susunod na antas.

KAUGNAYAN:Paano Gumamit ng Pangunahing Regular na Mga Ekspresyon upang Maghanap ng Mas mahusay at Makatipid ng Oras


$config[zx-auto] not found$config[zx-overlay] not found