Grep Regex Ամբողջական ուղեցույց


Ներածություն

Երբ խոսքը վերաբերում է տվյալների մշակմանը և վերլուծությանը, Grep Regex-ը հզոր գործիք է տեքստում օրինաչափություններ գտնելու համար: Այն սովորաբար օգտագործվում է մշակողների, համակարգի ադմինիստրատորների և տվյալների վերլուծաբանների շրջանում, ովքեր պետք է որոնեն որոշակի տողեր կամ հանեն համապատասխան տեղեկատվություն մեծ ծավալի տվյալներից:

Grep-ը նշանակում է «Global Regular Expression Print» և վերաբերում է հրամանի տող ծրագրին, որը փնտրում է նախշեր ֆայլերում կամ ելքային հոսքերում: Կանոնավոր արտահայտությունները (Regex) նիշերի հաջորդականություն են, որոնք սահմանում են օրինաչափություն, որը կարող է օգտագործվել տեքստի որոնման կամ մանիպուլյացիայի համար:

Ինչպես սկսել Grep Regex-ով

Grep-ի տեղադրում տարբեր հարթակներում

Նախքան Grep Regex-ի աշխարհը սուզվելը, կարևոր է նախ տեղադրել Grep-ը ձեր մեքենայի վրա: Տեղադրման գործընթացը կարող է տարբեր լինել՝ կախված ձեր օգտագործած հարթակից:

Unix-ի և Linux-ի օգտատերերի համար Grep-ը սովորաբար արդեն տեղադրված է: Այնուամենայնիվ, Windows-ի օգտատերերի համար դուք պետք է ներբեռնեք և տեղադրեք Grep-ի համապատասխան տարբերակը ձեր օպերացիոն համակարգի համար:

Mac օգտատերերի համար այն կարող եք տեղադրել Homebrew-ի միջոցով կամ փաթեթը ներբեռնելով նրա պաշտոնական կայքից: Երբ դուք հաջողությամբ տեղադրեք Grep-ը ձեր համակարգչում, պատրաստ եք սկսել այն օգտագործել:

Հիմնական շարահյուսություն և հրամաններ

Grep-ը հրամանի տող գործիք է, որը թույլ է տալիս տեքստային ֆայլերում նախշեր որոնել: Դրա հիմնական շարահյուսությունը − է

grep [options] pattern [file...]  

Այստեղ «pattern»-ը ներկայացնում է սովորական արտահայտությունների օրինաչափությունը, որը դուք ցանկանում եք որոնել «[file...]»-ում նշված մեկ կամ մի քանի ֆայլերում: Հարկ է նշել, որ եթե որևէ ֆայլ նշված չէ, ապա մուտքագրումը կվերցվի «stdin»-ից:

Կան մի քանի տարբերակներ, որոնք հասանելի են grep-ի հետ, որոնք կարող են փոփոխել նրա վարքագիծը՝ հիմնվելով ձեր կոնկրետ կարիքների վրա: Օրինակ,

  • * `-i`-ը նշում է մեծատառերի անզգույշ որոնում:

  • * «-r»-ը ռեկուրսիվ կերպով որոնում է բոլոր ֆայլերը գրացուցակի մեջ:

  • * «-l»-ը տպում է միայն օրինաչափությանը համապատասխանող ֆայլերի անունները:

  • * «-n»-ը տպում է տողերի համարները՝ գտնված համընկնումների հետ միասին:

Հասկանալով կանոնավոր արտահայտություններ

Կանոնավոր արտահայտությունները (Regex) կազմում են grep-ի էական մասը, քանի որ դրանք նշում են տեքստային ֆայլերում փնտրվող օրինաչափությունները: Կան ռեգեքսի օրինաչափությունների մի քանի տարրեր, որոնք կարող են ներառել −

  • * Մետանիշեր – նիշեր, որոնք հատուկ նշանակություն ունեն ռեգեքս շարահյուսության մեջ (օրինակ՝ '^', '<span>$'):

  • * Նիշերի դասեր - քառակուսի փակագծերում փակցված նիշերի հավաքածուներ (օրինակ՝ [a-z]), որոնք օգտագործվում են որոշակի նիշերի տեսակների կամ տիրույթների համապատասխանության համար:

  • * Քանակականիչներ – նշեք, թե քանի անգամ պետք է տեղի ունենա որոշակի օրինաչափություն (օրինակ՝ «*», «+», «?»):

  • * Խմբավորում և գրավում – թույլ է տալիս խմբավորել նախշերը միասին, ինչպես նաև դրանք գրավել հետագա օգտագործման համար:

  • * Lookarounds – օգտագործվում է տեքստում առաջ կամ հետևից նայելու համար՝ իրականում չներառելով այն համընկնման մեջ:

Այս տարրերը հասկանալը կարևոր է grep regex-ի հետ աշխատելիս, քանի որ դրանք կարող են օգնել ձեզ ստեղծել ավելի հզոր և ճշգրիտ որոնման օրինաչափություններ:

Կանոնավոր արտահայտություններ խորությամբ

Նիշերի դասեր և տիրույթներ. Regex-ի շինարարական բլոկները

Կանոնավոր արտահայտություններում նիշերի դասերը օգտագործվում են նիշերի շարքին համապատասխանելու համար: Նիշերի դասերը փակցված են քառակուսի փակագծերում- [ ] և կարող են ներառել մեկ նիշ կամ նիշերի շարք: Օրինակ, [aeiou] կանոնավոր արտահայտությունը կհամապատասխանի տեքստի ցանկացած ձայնավորին, մինչդեռ [a-z]-ը կհամապատասխանի ցանկացած փոքրատառի:

Բացի այդ, նիշերի դասերը կարող են ժխտվել՝ դրա առաջ ավելացնելով կարետ (^): Օրինակ, [^0-9]-ը համապատասխանում է ամեն ինչին, բացառությամբ թվանշանների:

Օրինակներ

Համապատասխանեցրեք ցանկացած թվանշան −

grep "[0-9]" file.txt

Համապատասխանեցրեք ցանկացած փոքրատառ −

grep "[a-z]" file.txt

Համապատասխանեցրեք ցանկացած մեծատառ −

grep "[A-Z]" file.txt

Համապատասխանեցրեք ցանկացած տառ (փոքր կամ մեծատառ) −

grep "[a-zA-Z]" file.txt

Համապատասխանեցրեք ցանկացած այբբենական թվային նիշ −

grep "[a-zA-Z0-9]" file.txt

Քանակականիչներ և այլընտրանքներ. Regex-ը դարձնել ավելի ճկուն

Քանակիչները նշում են, թե քանի անգամ պետք է հայտնվի նախորդ նիշը տեքստում: Օրինակ, «a{2,3}» նշանակում է, որ տեքստում պետք է լինի 2-ից 3 հարակից «a» նիշ:

Այլընտրանքը ևս մեկ կարևոր հասկացություն է, որը թույլ է տալիս նշել ուղղահայաց գծով (|) բաժանված բազմաթիվ նախշեր: Այս կերպ դուք կարող եք համապատասխանեցնել դրանցից որևէ մեկին:

Օրինակներ

Համապատասխանեցրեք «a» տառի մեկ կամ մի քանի դեպքեր

grep 'a+' file.txt

Համապատասխանեցրեք «խնձոր» բառի զրոյական կամ ավելի դեպքերը −

grep 'apple*' file.txt

Համապատասխանեցրե՛ք «0» թվանշանի երեք դեպք

grep '0{3}' file.txt

Համեմատեք կամ «կատու» կամ «շուն» -

grep 'cat|dog' file.txt

Համեմատեք կամ «խնձոր», «բանան» կամ «նարնջագույն» −

grep 'apple|banana|orange' file.txt

Խմբավորում և գրավում. բարդ համընկնումների համար ենթաօրինաչափությունների ստեղծում

Խմբավորումը վերաբերում է ձեր օրինակի մասերը «()» փակագծերով փակելուն: Խմբավորումը կարևոր է, երբ դուք ցանկանում եք չափորոշիչներ կամ փոփոխականներ կիրառել ձեր օրինակի որոշակի մասերի վրա: Ավելին, այն օգնում է նաև ընթերցանության և կազմակերպման հարցում:

Capturing-ը վերաբերում է ձեր համապատասխան տողի որոշակի մաս(ներ)ի դուրսբերմանը` օգտագործելով փակագծեր, որոնք նշում են հավաքող խմբերը: Հետագայում գրավված խմբերին մուտք գործելու համար կամ դրանք ուղղորդելու հենց օրինաչափության մեջ. մենք օգտագործում ենք հետադարձ հղումներ:

Օրինակներ

Կրկնվող նիշերի համապատասխանեցում.

$ echo "Helloooo" | grep -oE '(o+)\1'

Արդյունք

oooo

Էլփոստի հասցեների արդյունահանում −

$ echo "Contact us at email@example.com or support@example.com" | grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

Արդյունք

email@example.com
support@example.com

Հեռախոսահամարների արդյունահանում −

$ echo "Contact us at +1-555-123-4567 or 123-456-7890" | grep -oE '(\+?[0-9]+-)?[0-9]{3}-[0-9]{3}-[0-9]{4}'

Արդյունք

+1-555-123-4567
123-456-7890

HTML պիտակների համապատասխանեցում և բովանդակության գրավում −

$ echo "<h1>Title</h1><p>Paragraph</p>" | grep -oE '<(\w+)>.*<\/\1>'

Արդյունք

<h1>Title</h1>

<p>Paragraph</p>

Ամսաթվերի արդյունահանում հատուկ ձևաչափով −

$ echo "Today's date is 2023-06-15" | grep -oE '([0-9]{4})-([0-9]{2})-([0-9]{2})'

Արդյունք

2023-06-15

Lookarounds. Տեքստի համատեքստում համապատասխանեցնելու առաջադեմ տեխնիկա

Lookarounds-ը առաջադեմ տեխնիկա է, որը թույլ է տալիս ռեգեքս շարժիչին նայել առաջ կամ հետևից որոշակի դիրքերում՝ առանց այդ դիրքերը համապատասխանելու: Գոյություն ունեն երկու տեսակի հայացքներ

  • Positive Lookahead - համապատասխանում է նախորդ օրինակին միայն այն դեպքում, եթե դրան հաջորդում է կոնկրետ տեքստ:

  • Բացասական հայացք - համընկնում է նախորդ օրինակին միայն այն դեպքում, եթե այն չի հետևում կոնկրետ տեքստին: Lookarounds-ը կարող է օգտագործվել այն իրավիճակներում, երբ դուք պետք է համապատասխանեցնեք տողը, բայց միայն այն դեպքում, եթե այն բավարարում է որոշ պայմանների (օրինակ՝ տեղի է ունենում որոշակի բառից հետո կամ դրանից առաջ):

Ընդլայնված տեխնիկա Grep Regex-ի հետ

Դրոշների օգտագործումը վարքագիծը փոփոխելու համար

Դրոշները օգտագործվում են Grep Regex-ում կանոնավոր արտահայտությունների վարքը փոփոխելու համար: Օրինակ, դուք կարող եք օգտագործել այնպիսի դրոշներ, ինչպիսիք են -i-ն՝ մեծատառերի անզգույշ որոնում կամ -w միայն բառերի որոնման համար:

Բացի այդ, դուք կարող եք օգտագործել այնպիսի դրոշներ, ինչպիսիք են -v-ը, որոնումը շրջելու և ցուցադրելու միայն գծերը, որոնք չեն համապատասխանում օրինաչափությանը: Դուք կարող եք համատեղել բազմաթիվ դրոշներ միասին և հարմարեցնել ձեր որոնումը ձեր պահանջներին համապատասխան:

Օրինակներ

-i կամ --ignore-case. Համապատասխանելիս անտեսում է դեպքերի տարբերությունները: Օրինակ −

grep -i "apple" file.txt

-v կամ --invert-match. շրջում է համընկնում, այսինքն՝ տպում է միայն այն տողերը, որոնք չեն համապատասխանում օրինաչափությանը: Օրինակ −

grep -v "apple" file.txt

-w կամ --word-regexp. Համընկնում է միայն ամբողջական բառերի հետ: Օրինակ −

grep -w "apple" file.txt

-x կամ --line-regexp. Համապատասխանում է միայն ամբողջ տողերին: Օրինակ −

grep -x "apple" file.txt

-m N կամ --max-count=N: Դադարում է N համընկնում գտնելուց հետո: Օրինակ՝ գտնել օրինաչափության առաջին 5 դեպքերը

grep -m 5 "apple" file.txt

-r կամ --recursive. որոնում է ռեկուրսիվ դիրեկտորիաների միջոցով: Օրինակ −

grep -r "apple" /path/to/directory

Մի քանի նախշերի համադրում

Դուք կարող եք միավորել բազմաթիվ օրինաչափություններ մեկ Grep հրամանի մեջ՝ օգտագործելով տրամաբանական օպերատորներ, ինչպիսիք են | (OR) և & (AND): Սա թույլ է տալիս կատարել ավելի բարդ որոնումներ, որտեղ ցանկանում եք համապատասխանեցնել տողերը, որոնք պարունակում են երկու նախշեր կամ երկու նախշեր միաժամանակ: Բացի այդ, դուք կարող եք փակագծերով խմբավորել ձեր օրինաչափության տարբեր մասերը և ստեղծել ենթաօրինաչափություններ, որոնք համակցված են միասին:

Օրինակներ

Որոնել տողեր, որոնք պարունակում են «խնձոր», բայց ոչ «բանան» −

grep -E 'apple' filename.txt | grep -v 'banana'

«խնձոր» կամ «բանան» պարունակող տողերի որոնում, բայց ոչ «նարնջագույն» −

grep -E 'apple|banana' filename.txt | grep -v 'orange'

Տվյալների արդյունահանում Capture Groups-ով

Նկարահանման խմբերը թույլ են տալիս հատուկ տվյալներ հանել համապատասխան օրինաչափությունից՝ այն փակելով փակագծերում: Օրինակ, եթե ցանկանում եք ֆայլից հանել բոլոր էլփոստի հասցեները, կարող եք օգտագործել հավաքագրման խումբ էլփոստի հասցեի ձևանմուշի շուրջ և այնուհետև տպել միայն այդ գրավված խմբերը: Այս տեխնիկան օգտակար է տվյալների մեծ հավաքածուների հետ գործ ունենալիս, որտեղ անհրաժեշտ է հատուկ տեղեկատվության արդյունահանումը:

Օրինակներ

Էլփոստի հասցեների դուրսբերում ֆայլից −

grep -Eo '([A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\.([A-Za-z]{2,})' file.txt

Հեռախոսահամարների արդյունահանում հատուկ ձևաչափով −

grep -Eo '(\+\d{1,2})?(\d{3}-\d{3}-\d{4})' file.txt

URL-ների արդյունահանում վեբ էջից −

grep -Eo 'href="([^"]+)"' file.html

IP հասցեների արդյունահանում մատյան ֆայլից -

grep -Eo '(\d{1,3}\.){3}\d{1,3}' file.log

Եզրակացություն

Grep Regex-ը հզոր գործիք է, որը տվյալների վերլուծաբաններին հնարավորություն է տալիս արագ որոնել, զտել և տվյալների հանել մեծ տվյալների հավաքածուներից: Սովորական արտահայտություններին տիրապետելով՝ դուք կարող եք հեշտությամբ զտել հազարավոր կամ նույնիսկ միլիոնավոր գրառումները վայրկյանների ընթացքում՝ խնայելով ձեզ արժեքավոր ժամանակ և ջանք: Օպերատորների և նիշերի ճիշտ համադրությամբ բարդ նախշեր գրելու ունակությունը կարող է զգալիորեն բարելավել ձեր արտադրողականությունը՝ թույլ տալով կենտրոնանալ ավելի կարևոր խնդիրների վրա: