Ինչպես օգտագործել grep-ը՝ Linux shell-ի ֆայլերում տողեր որոնելու համար
GREP հրամանը ակնարկ է
grep հրամանը Linux-ում տեքստի որոնման հզոր ծրագիր է, որը թույլ է տալիս օգտվողներին որոնել ֆայլերի կամ տեքստի հոսքերի մեջ՝ որոշակի օրինաչափությունների համար: Այն նշանակում է «գլոբալ կանոնավոր արտահայտությունների տպագրություն», և այն աջակցում է որոնումը պարզ տեքստային տողերի և ավելի բարդ կանոնավոր արտահայտությունների միջոցով: Հրամանը հաճախ զուգակցվում է այլ հրամանների հետ՝ արդյունքը զտելու և ճշգրտելու համար: Լռելյայնորեն, grep-ը վերադարձնում է բոլոր տողերը, որոնք պարունակում են օրինակ: Այնուամենայնիվ, այն առաջարկում է որոնումը հարմարեցնելու տարբեր տարբերակներ, ինչպիսիք են դեպքերի զգայունությունը, դեպքերի հաշվումը կամ ռեկուրսիվ որոնումը դիրեկտորիաների միջոցով: Սա այն էական գործիք է դարձնում համակարգի ադմինիստրատորների, մշակողների և բոլոր նրանց համար, ովքեր աշխատում են տվյալների մեծ հավաքածուներով Unix-ի նման միջավայրում:
grep հրամանը հիմնականում օգտագործվում է տեքստում կամ ֆայլում փնտրելու տողեր, որոնք համապատասխանում են նշված բառերին/տողերին: Լռելյայնորեն, grep-ը ցուցադրում է համընկնող տողերը, և այն կարող է օգտագործվել տեքստի տողեր որոնելու համար, որոնք համապատասխանում են մեկ կամ մի քանի կանոնավոր արտահայտություններին, և այն թողարկում է միայն համապատասխան տողերը:
Նախադրյալներ
grep հրամանը Linux-ի ցանկացած բաշխման բազային օգտագործման մասն է, ուստի այն նախապես տեղադրված է AlmaLinux, CentOS, Debian, Linux Mint, Ubuntu, RHEL և RockyLinux-ում:
Հիմնական grep հրամանի շարահյուսությունը
Հիմնական grep հրամանի շարահյուսությունը հետևյալն է.
grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2' filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName
Ինչպես օգտագործել grep հրամանը ֆայլում որոնելու համար
Առաջին օրինակում ես կփնտրեմ «tom» օգտվողը Linux passwd ֆայլում։ /etc/passwd ֆայլը «tom» օգտագործողի համար որոնելու համար անհրաժեշտ է մուտքագրել հետևյալ հրամանը.
grep tom /etc/passwd
Ստորև տրված է ելքի նմուշը.
tom:x:1000:1000:tom,,,:/home/tom:/bin/bash
Դուք կարող եք grep-ին հանձնարարել անտեսել բառի մեծատառը, այսինքն՝ համապատասխանեցնել abc, Abc, ABC և բոլոր հնարավոր համակցությունները -i տարբերակով, ինչպես ցույց է տրված ստորև:
grep -i "tom" /etc/passwd
grep-ի ռեկուրսիվ օգտագործումը
Եթե դուք ունեք գրացուցակի հիերարխիայում մի շարք տեքստային ֆայլեր, օրինակ՝ Apache-ի կազմաձևման ֆայլերը /etc/apache2/-ում և ցանկանում եք գտնել այն ֆայլը, որտեղ որոշակի տեքստ է սահմանված, ապա օգտագործեք grep հրամանի -r տարբերակը՝ կատարել ռեկուրսիվ որոնում. Սա կկատարի ռեկուրսիվ որոնման գործողություն ֆայլերի միջով «197.167.2.9» տողի համար (ինչպես ցույց է տրված ստորև) գրացուցակում /etc/apache2/ և դրա բոլոր ենթագրքերում.
grep -r "mydomain.com" /etc/apache2/
Որպես այլընտրանք, կարող է օգտագործվել հետևյալ հրամանը.
grep -R "mydomain.com" /etc/apache2/
Ստորև տրված են Nginx սերվերի վրա նմանատիպ որոնման արդյունքների նմուշները.
grep -r "mydomain.com" /etc/nginx/
/etc/nginx/sites-available/mydomain.com.vhost: if ($http_host != "www.mydomain.com") {
Այստեղ դուք կտեսնեք mydomain.com-ի արդյունքը հստակ տողում, որին նախորդում է ֆայլի անունը (օրինակ, /etc/nginx/sites-available/mydomain.com.vhost), որտեղ այն գտնվել է: Ֆայլերի անունների ընդգրկումը ելքային տվյալների մեջ կարելի է հեշտությամբ ճնշել՝ օգտագործելով -h տարբերակը (ինչպես բացատրվում է ստորև). grep -h -R «mydomain.com» /etc/nginx/: Ստորև բերված է ելքի նմուշը՝
grep -r "mydomain.com" /etc/nginx/
if ($http_host != "www.mydomain.com") {
Օգտագործելով grep՝ միայն բառեր որոնելու համար
Երբ որոնում եք abc, grep-ը կհամապատասխանի բոլոր տեսակի բաներին, օրինակ՝ kbcabc, abc123, aarfbc35 և շատ այլ համակցություններ՝ առանց բառերի սահմաններին ենթարկվելու: Դուք կարող եք ստիպել grep հրամանին ընտրել միայն այն տողերը, որոնք պարունակում են համընկնումներ՝ ամբողջական բառեր կազմելու համար (նրանք, որոնք համապատասխանում են միայն abc բառին), ինչպես ցույց է տրված ստորև.
grep -w "abc" file.txt
Օրինակ՝
Օգտագործելով grep երկու տարբեր բառեր որոնելու համար
Երկու տարբեր բառեր որոնելու համար դուք պետք է օգտագործեք egrep հրամանը, ինչպես ցույց է տրված ստորև.
egrep -w 'word1|word2' /path/to/file
Հաշվեք տողերը համընկնող բառերի համար
grep հրամանը հնարավորություն ունի հաղորդելու, թե քանի անգամ է որոշակի օրինաչափություն համընկնում յուրաքանչյուր ֆայլի համար՝ օգտագործելով -c (count) տարբերակը (ինչպես ցույց է տրված ստորև):
grep -c 'word' /path/to/file
Բացի այդ, օգտվողները կարող են օգտագործել «-n» տարբերակը, որը նախորդում է յուրաքանչյուր ելքային տողին՝ տեքստային ֆայլի այն տողի համարով, որից այն ստացվել է (ինչպես ցույց է տրված ստորև).
grep -n 'root' /etc/passwd
Ստորև բերված են Նմուշի արդյունքները.
1:root:x:0:0:root:/root:/bin/bash
Grep ինվերտ համընկնում
Օգտատերերը կարող են օգտագործել -v տարբերակը՝ համապատասխանությունը շրջելու համար, ինչը նշանակում է, որ այն կհամապատասխանի միայն այն տողերին, որոնք չեն պարունակում տվյալ բառը: Օրինակ, տպեք բոլոր տողերը, որոնք չեն պարունակում պար բառը՝ օգտագործելով հետևյալ հրամանը.
grep -v par /path/to/file
Ինչպես թվարկել միայն համապատասխան ֆայլերի անունները
Դուք պետք է օգտագործեք -l տարբերակը՝ ցուցակագրելու ֆայլերի անունները, որոնց բովանդակությունը նշում է որոշակի բառ, օրինակ՝ «հիմնական» բառը՝ օգտագործելով հետևյալ հրամանը.
grep -l 'primary' *.c
Վերջապես, դուք հնարավորություն ունեք ստիպելու grep-ին ցուցադրել արտադրանքը հատուկ գույներով՝ օգտագործելով հետևյալ հրամանը.
grep --color root /etc/passwd
Ստորև բերված են օրինակելի արդյունքներ.
Ինչպես անել, որ grep հրամանը կարգավորի բազմաթիվ որոնման օրինաչափություններ
Կարող են լինել իրավիճակներ, երբ դուք կարող եք որոնել մի քանի օրինակներ տվյալ ֆայլում (կամ ֆայլերի հավաքածու): Նման սցենարներում դուք պետք է օգտագործեք «-e» հրամանի տող տարբերակը, որը տրամադրում է grep-ը:
Օրինակ, ենթադրենք, որ ցանկանում եք որոնել «ինչպես», «to» և «forge» բառերը ձեր ընթացիկ աշխատանքային գրացուցակում առկա բոլոր տեքստային ֆայլերում, ապա ահա թե ինչպես կարող եք դա անել.
grep -e how -e to -e forge *.txt
Ահա հրամանը գործողության մեջ.
«-e» հրամանի տող տարբերակը նաև օգնում է այն սցենարներին, երբ նախշը սկսվում է գծիկով (-): Օրինակ, եթե ցանկանում եք որոնել, ասենք, «-how», ապա հետևյալ հրամանը օգտակար չի լինի.
grep -how *.txt
Այն ժամանակ, երբ դուք օգտագործում եք -e հրամանի տող տարբերակը, հրամանը հասկանում է, թե կոնկրետ ինչ եք փորձում որոնել այս դեպքում.
grep -e -how *.txt
Ահա երկու հրամանները գործողության մեջ.
Ինչպես սահմանափակել grep ելքը որոշակի թվով տողերով
Եթե ցանկանում եք սահմանափակել grep ելքը որոշակի թվով տողերով, կարող եք դա անել՝ օգտագործելով «-m» հրամանի տող տարբերակը: Օրինակ, ենթադրենք, որ ցանկանում եք որոնել «how» բառը testfile1.txt-ում, որը պարունակում է հետևյալ տողերը.
Բայց պահանջն այն է, որ grep-ը դադարեցնի որոնումը այն բանից հետո, երբ որոնված նմուշը պարունակող 3 տող գտնվի: Այսպիսով, դա անելու համար կարող եք գործարկել հետևյալ հրամանը.
grep "how" -m3 testfile1.txt
Ահա հրամանը գործողության մեջ.
Շարժվելով, ահա թե ինչ է ասում հրամանի մարդու էջը.
If the input is standard input from a regular file, and NUM matching lines are output, grep ensuresthat the standard input is positioned to just after the last matching line before exiting, regardless of the presence of trailing context lines. This enables a calling process to resume a search.
Այսպիսով, օրինակ, եթե դուք ունեք bash սկրիպտ, որն ունի հանգույց և ցանկանում եք բեռնել մեկ համընկնում յուրաքանչյուր օղակի կրկնման համար, ապա օգտագործելով «grep -m1»-ն անհրաժեշտ կլինի:
Ինչպես անել, որ grep-ը ֆայլից օրինաչափություններ ստանա
Եթե ցանկանում եք, կարող եք նաև այնպես անել, որ grep հրամանը ֆայլից օրինաչափություններ ստանա: Գործիքի -f հրամանի տող տարբերակը թույլ է տալիս դա անել:
Օրինակ, ենթադրենք, որ ցանկանում եք որոնել ընթացիկ գրացուցակի բոլոր .txt ֆայլերը «how» և «to» բառերի համար, բայց ցանկանում եք մուտքագրել այս մուտքային տողերը, ասենք, «input» անունով ֆայլի միջոցով, ապա ահա թե ինչպես կարող եք. արեք սա.
grep -f input *.txt
Ահա հրամանը գործողության մեջ.
Ինչպես անել, որ grep-ը ցուցադրի միայն այն տողերը, որոնք լիովին համապատասխանում են որոնման օրինակին
Մինչ այժմ մենք տեսել ենք, որ լռելյայնորեն grep-ը համընկնում և ցուցադրում է ամբողջական տողեր, որոնք պարունակում են որոնման օրինաչափություններ: Բայց եթե պահանջն այն է, որ grep-ը ցուցադրի միայն այն տողերը, որոնք լիովին համապատասխանում են որոնված օրինակին, ապա դա կարելի է անել՝ օգտագործելով «-x» հրամանի տող տարբերակը:
Օրինակ, ենթադրենք testfile1.txt ֆայլը պարունակում է հետևյալ տողերը.
Եվ օրինակը, որը ցանկանում եք որոնել, «ինչպե՞ս եք»: Այսպիսով, համոզվելու համար, որ grep-ը ցուցադրում է միայն գծեր, որոնք լիովին համապատասխանում են այս օրինաչափությանը, օգտագործեք այն հետևյալ կերպ.
grep -x "how are you?" *.txt
Ահա հրամանը գործողության մեջ.
Ինչպես ստիպել grep-ին, որ ոչինչ չցուցադրի ելքում
Կարող են լինել իրավիճակներ, երբ ձեզ հարկավոր չէ grep հրամանը՝ ելքում որևէ բան արտադրելու համար: Փոխարենը, դուք պարզապես ցանկանում եք իմանալ, թե արդյոք համընկնում է գտնվել հրամանի ելքի կարգավիճակի հիման վրա, թե ոչ: Դրան կարելի է հասնել՝ օգտագործելով -q հրամանի տող տարբերակը:
Մինչ -q տարբերակը խլացնում է ելքը, գործիքի ելքի կարգավիճակը կարող է հաստատվել 'echo $?'-ով: հրաման. grep-ի դեպքում հրամանը դուրս է գալիս «0» կարգավիճակով, երբ այն հաջող է (նշանակում է՝ համընկնում է գտնվել), մինչդեռ այն դուրս է գալիս «1» կարգավիճակով, երբ համընկնում չի գտնվել:
Հետևյալ սքրինշոթը ցույց է տալիս և՛ հաջող, և՛ անհաջող սցենարները.
Ինչպես ստեղծել grep ցուցադրվող ֆայլերի անվանումը, որոնք չեն պարունակում որոնման օրինակ
Լռելյայնորեն, grep հրամանը ցուցադրում է որոնման օրինաչափություն պարունակող ֆայլերի անվանումը (ինչպես նաև համապատասխան տողեր): Սա միանգամայն տրամաբանական է, քանի որ դա այն էր, ինչ ակնկալվում էր այս գործիքից: Այնուամենայնիվ, կարող են լինել դեպքեր, երբ պահանջ կարող է լինել ստանալ այն ֆայլերի անունները, որոնք չեն պարունակում որոնված օրինակը:
Սա հնարավոր է նաև grep-ի դեպքում. -L ընտրանքները թույլ են տալիս դա անել: Այսպիսով, օրինակ, ընթացիկ գրացուցակում բոլոր այն տեքստային ֆայլերը գտնելու համար, որոնք չեն պարունակում «ինչպես» բառը, կարող եք գործարկել հետևյալ հրամանը.
grep -L "how" *.txt
Ահա հրամանը գործողության մեջ.
Ինչպես ճնշել grep-ի կողմից արտադրված սխալ հաղորդագրությունները
Դուք կարող եք ստիպել grep-ին խլացնել ցանկացած սխալի հաղորդագրություն, որը ցուցադրում է ելքում, եթե ցանկանում եք: Դա կարելի է անել՝ օգտագործելով -s հրամանի տող տարբերակը: Օրինակ, հաշվի առեք հետևյալ սցենարը, երբ grep-ը առաջացնում է սխալ/նախազգուշացում՝ կապված իր հանդիպած գրացուցակի հետ.
Այսպիսով, այս տեսակի սցենարում օգնում է -s հրամանի տող տարբերակը: Տես ստորև։
Այսպիսով, դուք կարող եք տեսնել, որ սխալը/նախազգուշացումը անջատվել է:
Ինչպես կատարել grep-ի ռեկուրսիվ որոնման դիրեկտորիաներ
Ինչպես պարզ է նախորդ կետում օգտագործված օրինակից, grep հրամանը լռելյայնորեն ռեկուրսիվ որոնում չի կատարում: Համոզվելու համար, որ ձեր grep որոնումը ռեկուրսիվ է, օգտագործեք -d հրամանի տող տարբերակը և փոխանցեք «recurse» արժեքը:
grep -d recurse "how" *
Ծանոթագրություն 1. գրացուցակի հետ կապված սխալ/նախազգուշական հաղորդագրություն Նախորդ կետում քննարկվածը կարող է նաև անջատվել՝ օգտագործելով—d տարբերակը, այն ամենը, ինչ դուք պետք է անեք, փոխանցեք «բաց թողնել» արժեքը:
Ծանոթագրություն 2. Օգտագործեք '--exclude-dir =[DIR]' տարբերակ՝ DIR օրինաչափությանը համապատասխանող դիրեկտորիաները ռեկուրսիվ որոնումներից բացառելու համար:
Ինչպես անել, որ grep-ը վերջացնի ֆայլերի անունները NULL նիշով
Ինչպես արդեն քննարկել ենք, grep-ի -l հրամանի տող տարբերակը օգտագործվում է այն դեպքում, երբ ցանկանում եք, որ գործիքը ցուցադրի ֆայլերի անունները ելքում: Օրինակ՝
Այժմ դուք պետք է իմանաք, որ վերոհիշյալ ելքի յուրաքանչյուր անուն առանձնացված/վերջացված է նոր տողով: Ահա թե ինչպես կարող եք դա հաստատել.
Վերահղեք արդյունքը ֆայլ, այնուհետև տպեք ֆայլի բովանդակությունը.
Այսպիսով, cat հրամանի ելքը հաստատում է ֆայլերի անունների միջև նոր տողի նիշի առկայությունը:
Բայց ինչպես արդեն գիտեք, նոր տողի նիշը կարող է նաև լինել ֆայլի անվան մաս: Այսպիսով, երբ գործ ունենք այն դեպքերի հետ, երբ ֆայլերի անունները պարունակում են նոր տող և առանձնացված/ավարտվում են նոր տողով, դժվարանում է աշխատել grep ելքի վրա (հատկապես, երբ ելք մուտք գործելը սկրիպտի միջոցով):
Լավ կլիներ, որ բաժանող/վերջացնող նշանը նոր տող չլիներ։ Դե, դուք ուրախ կլինեք իմանալ, որ grep-ն ապահովում է հրամանի տողի տարբերակ՝ Z, որը ապահովում է, որ ֆայլերի անուններին հաջորդում է NULL նիշը և ոչ թե նոր տողը:
Այսպիսով, մեր դեպքում հրամանը դառնում է.
grep -lZ "how" *.txt
Ահա թե ինչպես մենք հաստատեցինք NULL նիշի առկայությունը.
Ստորև բերված է հրամանի տողի հարակից տարբերակ, որը դուք պետք է իմանաք.
-z, --null-data
Treat the input as a set of lines, each terminated by a zero byte (the ASCII NUL character) insteadof a newline. Like the -Z or --null option, this option can be used with commands like sort -z to process arbitrary file names.
Ինչպես օգտագործել GREP-ը գրանցամատյանների ֆայլերում սխալներ գտնելու համար
Grep-ը Linux-ի ադմինիստրատորի շվեյցարական բանակի դանակն է, երբ խոսքը վերաբերում է ծառայությունների սխալների վերացմանը: Linux-ի ծառայություններից շատերն ունեն մատյան ֆայլեր, որտեղ նրանք հայտնում են սխալներ: Այս գրանցամատյանի ֆայլերը կարող են հսկայական լինել, և grep-ը բազմակողմանի և արագ հրաման է՝ որոնելու համար, օրինակ՝ միացնող համակարգի IP հասցեն, սխալի տողը կամ mail.log-ում տուժած փոստի օգտվողի էլ․ հասցեն:
Օրինակներ.
Որոնեք կապեր՝ կապված կոնկրետ էլփոստի հասցեի հետ: Այստեղ «[email » սերվերի mail.log ֆայլում է:
grep [email /var/log/mail.log
Արդյունք.
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email >, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17596, TLS, session=<3uoa5ffQovld3Uep>
Aug 22 09:45:10 mail dovecot: pop3([email )<17596><3uoa5ffQovld3Uep>: Disconnected: Logged out top=0/0, retr=1/6647, del=1/1, size=6630
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email >, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17673, TLS, session=<fIIx6PfQkuBd3Uep>
Aug 22 09:45:10 mail dovecot: pop3([email )<17673><fIIx6PfQkuBd3Uep>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email >, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17868, TLS, session=<bd5L7ffQPsld3Uep>
Aug 22 09:45:10 mail dovecot: pop3([email )<17868><bd5L7ffQPsld3Uep>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email >, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17964, TLS, session=<sbpn7vfQevpd3Uep>
Aug 22 09:45:10 mail dovecot: pop3([email )<17964><sbpn7vfQevpd3Uep>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Aug 22 09:45:10 mail postfix/smtpd[6932]: NOQUEUE: reject: RCPT from unknown[1.2.3.4]: 504 5.5.2 <1.2.3.4>: Helo command rejected: need fully-qualified hostname; from=<[email > to=<[email > proto=ESMTP helo=<1.2.3.4>
Այս էլփոստի հասցեի միացումների գրանցամատյանի ֆայլը շարունակաբար վերահսկելու համար համատեղեք tail և grep հրամանները, ինչպիսիք են.
tail -f /var/log/mail.log | grep [email
Ժամացույցի գործառույթից դուրս գալու համար սեղմեք [strg] + c ստեղները:
Ավելի շատ GREP հրամանի օրինակներ
Այս Linux հրամանի օգտագործման ավելի շատ օրինակներ կարող եք գտնել մեր երկրորդ GREP հրամանի ձեռնարկում:
- Ինչպես կատարել օրինաչափությունների որոնում ֆայլերում՝ օգտագործելով Grep