Կրթական ծրագիր GREP-ի և կանոնավոր արտահայտությունների վերաբերյալ: Bash կանոնավոր արտահայտություններ. ստեղծման ուղեցույց, հավելված, օրինակներ Grep կանոնավոր արտահայտությունների օրինակներ

grep-ը նշանակում է «գլոբալ կանոնավոր արտահայտությունների տպիչ»: grep-ը կտրում է ձեզ անհրաժեշտ տողերը տեքստային ֆայլերից, որոնք պարունակում են օգտագործողը նշված էտեքստը։

grep-ը կարող է օգտագործվել երկու եղանակով՝ ինքնուրույն կամ հոսքերի հետ համատեղ:

grep-ը շատ ընդարձակ է ֆունկցիոնալությամբ, քանի որ այն աջակցում է մեծ թվով տարբերակների, ինչպիսիք են՝ որոնումը օգտագործելով տողային օրինակ կամ RegExp կանոնավոր արտահայտությունների օրինակ կամ perl-ի վրա հիմնված կանոնավոր արտահայտություններ և այլն:

Իր տարբերությամբ պայմանավորված ֆունկցիոնալությունը grep գործիքն ունի բազմաթիվ տարբերակներ, այդ թվում egrep (Ընդլայնված GREP), fgrep (ֆիքսված GREP), pgrep (Գործընթաց GREP), rgrep (ռեկուրսիվ GREP)և այլն: Բայց այս տարբերակները չնչին տարբերություններ ունեն սկզբնական grep-ից:

grep ընտրանքներ

$ grep -V grep (GNU grep) 2.10 Հեղինակային իրավունք (C) 2011 Free Software Foundation, Inc. Լիցենզիա GPLv3+

Կան grep օգտակարի փոփոխություններ՝ egrep (ընդլայնված կանոնավոր արտահայտությունների մշակմամբ), fgrep (որը $*^|()\ սիմվոլները վերաբերվում է որպես բառացի, այսինքն՝ բառացի), rgrep (ռեկուրսիվ որոնումը միացված է):

    egrep նույնն է, ինչ grep -E

    fgrep-ը նույնն է, ինչ grep -F

    rgrep նույնն է, ինչ grep -r

    grep [-b] [-c] [-i] [-l] [-n] [-s] [-v] limited_regex_BRE [ֆայլ ...]

grep հրամանը համընկնում է սկզբնաղբյուր ֆայլերի տողերը limit_regex-ի կողմից նշված օրինակին: Եթե ​​ոչ մի ֆայլ նշված չէ, օգտագործվում է ստանդարտ մուտքագրում: Սովորաբար, յուրաքանչյուր հաջողությամբ համընկնող տող պատճենվում է ստանդարտ ելքի վրա. եթե կան մի քանի սկզբնաղբյուր ֆայլեր, ֆայլի անունը տրվում է հայտնաբերված տողից առաջ: grep-ն օգտագործում է կոմպակտ, ոչ դետերմինիստական ​​ալգորիթմ: Սահմանափակ կանոնավոր արտահայտությունները (արտահայտություններ, որոնք ունեն նիշերի տողեր իրենց իմաստներով և օգտագործում են այբբենական և հատուկ նիշերի սահմանափակ շարք) ընկալվում են որպես ձևանմուշներ։ Նրանք ունեն նույն նշանակությունը, ինչ կանոնավոր արտահայտությունները ed.

$, *, , ^, |, () և \ նիշերը shell-ի մեկնաբանությունից խուսափելու համար ամենահեշտն է սահմանափակված_regex-ը փակել միայնակ չակերտների մեջ:

Ընտրանքներ:

B Նախաբանում յուրաքանչյուր տող այն բլոկի համարով, որում այն ​​գտնվել է: Սա կարող է օգտակար լինել, երբ որոնում եք բլոկներ ըստ համատեքստի (բլոկները համարակալվում են 0-ից սկսած): -c Տպում է միայն նախշը պարունակող տողերի քանակը: -h Կանխում է համընկնող տող պարունակող ֆայլի անվան տպագրությունը հենց տողից առաջ: Օգտագործվում է բազմաթիվ ֆայլեր որոնելիս: -i Համեմատություններ անելիս անտեսում է դեպքը: -l Տպում է միայն համընկնող տողեր պարունակող ֆայլերի անունները՝ մեկ տողում: Եթե ​​ֆայլի մի քանի տողերի վրա օրինաչափություն է հայտնաբերվել, ֆայլի անունը չի կրկնվում: -n յուրաքանչյուր տողից առաջ տպում է իր համարը ֆայլում (տողերը համարակալվում են 1-ից սկսած): -s Ճեղքում է գոյություն չունեցող կամ անընթեռնելի ֆայլերի մասին հաղորդագրությունները: -v Տպում է բոլոր տողերը, բացառությամբ օրինակ պարունակողների: -w Որոնում է արտահայտությունը որպես բառ, կարծես այն շրջապատված է մետանիշերով \< и \>.

grep - օգնություն

Օգտագործում՝ grep [OPTION]... PATTERN [FILE]... Փնտրում է PATTERN յուրաքանչյուր Ֆայլի կամ ստանդարտ մուտքագրման մեջ: Լռելյայնորեն, PATTERN-ը պարզ կանոնավոր արտահայտություն է (BRE): Օրինակ՝ grep -i «բարև աշխարհ» menu.h main.c Ընտրելով կանոնավոր արտահայտության տեսակը և դրա մեկնաբանումը. -E, --extended-regexp PATTERN - ընդլայնված կանոնավոր արտահայտություն (ERE) -F, --fixed-regexp PATTERN - տողերի ֆիքսված երկարություն, առանձնացված նոր տողերով -G, --basic-regexp PATTERN - պարզ կանոնավոր արտահայտություն (BRE) -P, --perl-regexp PATTERN - Perl կանոնավոր արտահայտություններ -e, --regexp=PATTERN օգտագործեք PATTERN որոնման համար - f, --file=FILE վերցնել PATTERN-ը FILE-ից -i, --ignore-case ignore case տարբերությունը -w, --word-regexp PATTERN-ը պետք է համապատասխանի բոլոր բառերին -x, --line-regexp PATTERN-ը պետք է համապատասխանի ամբողջ -z տողին: , --null-data տողերը բաժանվում են զրոյական բայթով, այլ ոչ թե տողի վերջի նիշով Տարբեր. տարբերակի մասին տեղեկատվություն և ելք -- օգնություն ցույց տալ այս օգնությունը և ելք --mmap հետադարձ համատեղելիության համար, անտեսված Արդյունքի կառավարում. օֆսեթ ելքային տողերի հետ միասին -n, --line-number տպել գծի համարը ելքային գծերի հետ միասին --line-buffered flush the buffer-ը յուրաքանչյուր տողից հետո -H, --with-filename տպել ֆայլի անունը յուրաքանչյուր համընկնման համար - h , --no-filename չսկսել ելքը ֆայլի անունով --label=LABEL օգտագործել LABEL որպես ֆայլի անուն ստանդարտ մուտքագրման համար -o, --only-matching ցույց տալ տողի միայն մի մասը, որը համապատասխանում է PATTERN -q, --quiet, - - silent suppress all normal output --binary-files=TYPE ենթադրենք, որ երկուական ֆայլն ունի երկուական, տեքստային կամ առանց համընկնման ՏԻՊ: «fgrep»-ի փոխարեն ենթադրվում է «grep -F»: Ավելի լավ է չառաջադրվել որպես «egrep» կամ «fgrep»: Երբ FILE-ը նշված չէ, կամ երբ FILE-ը - է, ապա ստանդարտ մուտքագրումը կարդացվում է: Եթե ​​նշված են երկու ֆայլից պակաս, ապա ենթադրվում է -h: Եթե ​​համընկնում է, ելքի կոդը կլինի 0, իսկ եթե ոչ՝ 1, եթե սխալներ են տեղի ունենում, կամ եթե -q տարբերակը նշված չէ, ելքի կոդը կլինի 2: Հաղորդեք սխալների մասին՝ Խնդրում ենք զեկուցել թարգմանության սխալների մասին՝ GNU Grep գլխավոր էջ. Օգնություն GNU ծրագրերի հետ աշխատելու համար.

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

  • Տեքստի մուտքագրման ստուգում;
  • Որոնել և փոխարինել տեքստը ֆայլում;
  • Ֆայլերի խմբաքանակի վերանվանում;
  • Փոխազդեցություն այնպիսի ծառայությունների հետ, ինչպիսին է Apache-ն;
  • Ստուգում է տողի համապատասխանությունը նախշին:

Սա հեռու է ամբողջական ցանկըԿանոնավոր արտահայտությունները թույլ են տալիս շատ ավելին անել: Բայց նոր օգտատերերի համար դրանք կարող են չափազանց բարդ թվալ, քանի որ դրանք ստեղծելու համար նրանք օգտագործում են հատուկ լեզու: Բայց հաշվի առնելով տրամադրված հնարավորությունները, բոլորը պետք է իմանան և կարողանան օգտագործել Linux-ի կանոնավոր արտահայտությունները համակարգի ադմինիստրատոր.

Այս հոդվածում մենք կդիտարկենք bash կանոնավոր արտահայտությունները սկսնակների համար, որպեսզի կարողանաք հասկանալ այս գործիքի բոլոր հատկանիշները:

Կան երկու տեսակի նիշեր, որոնք կարող են օգտագործվել կանոնավոր արտահայտություններում.

  • սովորական տառեր;
  • մետանիշեր.

Ընդհանուր նիշերն են տառերը, թվերը և կետադրական նշանները, որոնք կազմում են ցանկացած տող: Բոլոր տեքստերը կազմված են տառերից, և դուք կարող եք դրանք օգտագործել կանոնավոր արտահայտություններում՝ տեքստում ցանկալի դիրքը գտնելու համար:

Մետանիշերն այլ բան են, նրանք են, որ կանոնավոր արտահայտություններին իրենց ուժն են հաղորդում: Մետանիշերի միջոցով դուք կարող եք շատ ավելին անել, քան պարզապես մեկ կերպար փնտրել: Դուք կարող եք որոնել նշանների համակցություններ, օգտագործել դինամիկ թվով նշաններ և ընտրել միջակայքերը: Բոլոր հատուկ նիշերը կարելի է բաժանել երկու տեսակի՝ փոխարինող նիշեր, որոնք փոխարինում են սովորական նիշերին, կամ օպերատորներ, որոնք ցույց են տալիս, թե քանի անգամ կարող է կրկնվել նիշը։ Կանոնավոր արտահայտության շարահյուսությունը կունենա հետևյալ տեսքը.

կանոնավոր_նիշ հատուկ նիշ_օպերատոր

հատուկ_փոխարինող_նիշ հատուկ նիշ_օպերատոր

  • \ - այբբենական հատուկ նիշերը սկսվում են ետ կտրվածքով, և այն օգտագործվում է նաև, եթե անհրաժեշտ է օգտագործել հատուկ նիշ ցանկացած կետադրական նշանի տեսքով.
  • ^ - ցույց է տալիս տողի սկիզբը.
  • $ - ցույց է տալիս տողի վերջը.
  • * - ցույց է տալիս, որ նախորդ նիշը կարող է կրկնվել 0 կամ ավելի անգամ.
  • + - ցույց է տալիս, որ նախորդ նիշը պետք է կրկնվի մեկ կամ մի քանի անգամ.
  • ? - նախորդ նիշը կարող է առաջանալ զրո կամ մեկ անգամ;
  • (n)- ցույց է տալիս, թե քանի անգամ (n) պետք է կրկնվի նախորդ նիշը.
  • (N,n)- նախորդ նիշը կարող է կրկնվել N-ից n անգամ;
  • . - ցանկացած նիշ, բացի տողերի հոսքից;
  • - փակագծերում նշված ցանկացած նիշ;
  • x|y- խորհրդանիշ x կամ խորհրդանիշ y;
  • [^ազ]- ցանկացած նիշ, բացառությամբ փակագծերում նշվածների.
  • - նշված տիրույթից ցանկացած նիշ;
  • [^ա-զ]- ցանկացած նիշ, որը տիրույթում չէ.
  • - նշանակում է բառի սահման բացատով.
  • - նշանակում է, որ նիշը պետք է լինի բառի ներսում, օրինակ՝ ux-ը կհամապատասխանի uxb-ին կամ tuxedo-ին, բայց չի համապատասխանի Linux-ին;
  • - նշանակում է, որ խորհրդանիշը թիվ է.
  • - ոչ թվային նշան;
  • \n- տողերի սնուցման բնույթ;
  • - տիեզերական նիշերից մեկը, բացատը, ներդիրը և այլն;
  • - ցանկացած նիշ բացի տարածությունից;
  • \ տ- ներդիրի նիշ;
  • \v- ուղղահայաց ներդիրի նիշ;
  • \ w- ցանկացած այբբենական նիշ, ներառյալ ընդգծված;
  • - ցանկացած այբբենական նիշ, բացառությամբ ընդգծման;
  • \uXXX- Unicdoe խորհրդանիշ.

Կարևոր է նշել, որ այբբենական հատուկ նիշերից առաջ պետք է օգտագործել շեղ՝ նշելու, որ հաջորդը հատուկ նիշ է: Ճիշտ է նաև հակառակը, եթե ցանկանում եք օգտագործել հատուկ նիշ, որն օգտագործվում է առանց շեղի որպես սովորական նիշ, ապա դուք պետք է ավելացնեք կտրվածք:

Օրինակ, ցանկանում եք տեքստում գտնել 1+ 2=3 տողը: Եթե ​​դուք օգտագործում եք այս տողը որպես կանոնավոր արտահայտություն, դուք ոչինչ չեք գտնի, քանի որ համակարգը մեկնաբանում է գումարածը որպես հատուկ նիշ, որը ցույց է տալիս, որ նախորդ միավորը պետք է կրկնվի մեկ կամ մի քանի անգամ: Այսպիսով, այն պետք է փախչի. 1 \+ 2 = 3: Առանց փախուստի, մեր կանոնավոր արտահայտությունը կհամապատասխանի միայն 11=3 կամ 111=3 տողին և այլն: Կարիք չկա հավասարի դիմաց գիծ դնել, քանի որ դա առանձնահատուկ կերպար չէ։

Կանոնավոր արտահայտությունների օգտագործման օրինակներ

Այժմ, երբ մենք լուսաբանեցինք հիմունքները, և դուք գիտեք, թե ինչպես է ամեն ինչ աշխատում, մնում է գործնականում համախմբել linux grep կանոնավոր արտահայտությունների մասին ձեր ձեռք բերած գիտելիքները: Երկու շատ օգտակար հատուկ նիշերն են ^ և $, որոնք ցույց են տալիս տողի սկիզբն ու վերջը: Օրինակ, մենք ցանկանում ենք գրանցել մեր համակարգում գրանցված բոլոր օգտվողները, որոնց անունը սկսվում է s-ով: Այնուհետև կարող եք օգտագործել կանոնավոր արտահայտություն «^ս». Դուք կարող եք օգտագործել egrep հրամանը.

egrep «^s» /etc/passwd

Եթե ​​մենք ցանկանում ենք ընտրել տողեր՝ հիմնվելով տողի վերջին նիշի վրա, ապա դրա համար կարող ենք օգտագործել $: Օրինակ՝ եկեք ընտրենք համակարգի բոլոր օգտագործողներին՝ առանց կեղևի, այդպիսի օգտատերերի մասին գրառումներն ավարտվում են կեղծով.

egrep «false$» /etc/passwd

s կամ d-ով սկսվող օգտանունները ցուցադրելու համար օգտագործեք այս արտահայտությունը.

egrep «^» /etc/passwd

Նույն արդյունքը կարելի է ստանալ՝ օգտագործելով «|» նշանը: Առաջին տարբերակը ավելի հարմար է միջակայքերի համար, իսկ երկրորդը ավելի հաճախ օգտագործվում է սովորական կամ/կամ.

egrep «^» /etc/passwd

Այժմ ընտրենք բոլոր այն օգտվողներին, որոնց անունը երեք նիշ չէ: Օգտվողի անունը վերջանում է երկու կետով: Կարելի է ասել, որ այն կարող է պարունակել ցանկացած այբբենական նիշ, որը պետք է կրկնել երեք անգամ՝ երկու կետից առաջ.

egrep «^\w(3):» /etc/passwd

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

Այս հոդվածում մենք լուսաբանեցինք Linux-ի կանոնավոր արտահայտությունները, բայց դա միայն հիմնականն էր: Եթե ​​մի փոքր խորանաք, ապա կտեսնեք, որ այս գործիքի միջոցով կարող եք շատ ավելի հետաքրքիր բաներ անել: Ժամանակ հատկացնել կանոնավոր արտահայտություններին տիրապետելու համար, անկասկած, արժե այն:

Եզրափակելով, Yandex-ի դասախոսությունը կանոնավոր արտահայտությունների մասին.

Կանոնավոր արտահայտությունները շատ հզոր գործիք են տեքստը ըստ օրինաչափության որոնման, տողերի մշակման և փոփոխման համար, որոնք կարող են օգտագործվել բազմաթիվ խնդիրներ լուծելու համար: Ահա հիմնականները.

  • Տեքստի մուտքագրման ստուգում;
  • Որոնել և փոխարինել տեքստը ֆայլում;
  • Ֆայլերի խմբաքանակի վերանվանում;
  • Փոխազդեցություն այնպիսի ծառայությունների հետ, ինչպիսին է Apache-ն;
  • Ստուգում է տողի համապատասխանությունը նախշին:

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

Այս հոդվածում մենք կդիտարկենք bash կանոնավոր արտահայտությունները սկսնակների համար, որպեսզի կարողանաք հասկանալ այս գործիքի բոլոր հատկանիշները:

Կան երկու տեսակի նիշեր, որոնք կարող են օգտագործվել կանոնավոր արտահայտություններում.

  • սովորական տառեր;
  • մետանիշեր.

Ընդհանուր նիշերն են տառերը, թվերը և կետադրական նշանները, որոնք կազմում են ցանկացած տող: Բոլոր տեքստերը կազմված են տառերից, և դուք կարող եք դրանք օգտագործել կանոնավոր արտահայտություններում՝ տեքստում ցանկալի դիրքը գտնելու համար:

Մետանիշերն այլ բան են, որոնք կանոնավոր արտահայտություններին տալիս են իրենց ուժը. Մետանիշերի միջոցով դուք կարող եք շատ ավելին անել, քան պարզապես մեկ կերպար փնտրել: Դուք կարող եք որոնել նշանների համակցություններ, օգտագործել դինամիկ թվով նշաններ և ընտրել միջակայքերը: Բոլոր հատուկ նիշերը կարելի է բաժանել երկու տեսակի՝ փոխարինող նիշեր, որոնք փոխարինում են սովորական նիշերին, կամ օպերատորներ, որոնք ցույց են տալիս, թե քանի անգամ կարող է կրկնվել նիշը։ Կանոնավոր արտահայտության շարահյուսությունը կունենա հետևյալ տեսքը.

կանոնավոր_նիշ հատուկ նիշ_օպերատոր

հատուկ_փոխարինող_նիշ հատուկ նիշ_օպերատոր

  • — այբբենական հատուկ նիշերը սկսվում են ետ կտրվածքով, և այն օգտագործվում է նաև, եթե անհրաժեշտ է օգտագործել հատուկ նիշ ցանկացած կետադրական նշանի տեսքով.
  • ^ — ցույց է տալիս տողի սկիզբը.
  • $ — ցույց է տալիս տողի վերջը.
  • * — ցույց է տալիս, որ նախորդ նիշը կարող է կրկնվել 0 կամ ավելի անգամ.
  • + — ցույց է տալիս, որ նախորդ նիշը պետք է կրկնվի մեկ կամ մի քանի անգամ.
  • ? — նախորդ նիշը կարող է առաջանալ զրո կամ մեկ անգամ.
  • (n)— ցույց է տալիս, թե քանի անգամ (n) պետք է կրկնվի նախորդ նիշը.
  • (N,n)— նախորդ նիշը կարող է կրկնվել N-ից n անգամ.
  • . - ցանկացած նիշ, բացի տողերի հոսքից;
  • - փակագծերում նշված ցանկացած նիշ.
  • x|y- խորհրդանիշ x կամ խորհրդանիշ y;
  • [^ազ]- ցանկացած նիշ, բացառությամբ փակագծերում նշվածների.
  • — նշված տիրույթից ցանկացած նիշ.
  • [^ա-զ]- ցանկացած նիշ, որը տիրույթում չէ.
  • բ- նշանակում է բառի սահման բացատով.
  • Բ— նշանակում է, որ նիշը պետք է լինի բառի ներսում, օրինակ՝ ux-ը կհամապատասխանի uxb-ին կամ tuxedo-ին, բայց չի համապատասխանի Linux-ին;
  • դ- նշանակում է, որ խորհրդանիշը թիվ է.
  • Դ- ոչ թվային նիշ;
  • n- տողերի սնուցման բնույթ;
  • ս- տիեզերական նիշերից մեկը, բացատը, ներդիրը և այլն;
  • Ս- ցանկացած նիշ բացի տարածությունից;
  • տ- ներդիրի նիշ;
  • v- ուղղահայաց ներդիրի նիշ;
  • w- ցանկացած այբբենական նիշ, ներառյալ ընդգծված;
  • Վ- ցանկացած այբբենական նիշ, բացառությամբ ընդգծման;
  • uXXX- Unicdoe խորհրդանիշ:

Կարևոր է նշել, որ այբբենական հատուկ նիշերից առաջ պետք է օգտագործել շեղ՝ նշելու, որ հաջորդը հատուկ նիշ է: Ճիշտ է նաև հակառակը, եթե ցանկանում եք օգտագործել հատուկ նիշ, որն օգտագործվում է առանց շեղի որպես սովորական նիշ, ապա դուք պետք է ավելացնեք կտրվածք:

Օրինակ, ցանկանում եք տեքստում գտնել 1+ 2=3 տողը: Եթե ​​դուք օգտագործում եք այս տողը որպես կանոնավոր արտահայտություն, դուք ոչինչ չեք գտնի, քանի որ համակարգը մեկնաբանում է գումարածը որպես հատուկ նիշ, որը ցույց է տալիս, որ նախորդ միավորը պետք է կրկնվի մեկ կամ մի քանի անգամ: Այսպիսով, այն պետք է փախչի. 1 + 2 = 3: Առանց փախչելու, մեր կանոնավոր արտահայտությունը կհամընկնի միայն 11=3 կամ 111=3 տողի հետ և այլն: Կարիք չկա հավասարի դիմաց գիծ դնել, քանի որ դա առանձնահատուկ կերպար չէ։

Կանոնավոր արտահայտությունների օգտագործման օրինակներ

Այժմ, երբ մենք լուսաբանեցինք հիմունքները, և դուք գիտեք, թե ինչպես է ամեն ինչ աշխատում, մնում է գործնականում համախմբել linux grep կանոնավոր արտահայտությունների մասին ձեր ձեռք բերած գիտելիքները: Երկու շատ օգտակար հատուկ նիշերն են ^ և $, որոնք ցույց են տալիս տողի սկիզբն ու վերջը: Օրինակ, մենք ցանկանում ենք գրանցել մեր համակարգում գրանցված բոլոր օգտվողները, որոնց անունը սկսվում է s-ով: Այնուհետև կարող եք օգտագործել կանոնավոր արտահայտություն «^ս». Դուք կարող եք օգտագործել egrep հրամանը.

egrep «^s» /etc/passwd

Եթե ​​մենք ցանկանում ենք ընտրել տողեր՝ հիմնվելով տողի վերջին նիշի վրա, ապա դրա համար կարող ենք օգտագործել $: Օրինակ՝ եկեք ընտրենք համակարգի բոլոր օգտագործողներին՝ առանց կեղևի, այդպիսի օգտատերերի մասին գրառումներն ավարտվում են կեղծով.

egrep «false$» /etc/passwd

s կամ d-ով սկսվող օգտանունները ցուցադրելու համար օգտագործեք այս արտահայտությունը.

egrep «^» /etc/passwd

Նույն արդյունքը կարելի է ստանալ՝ օգտագործելով «|» նշանը: Առաջին տարբերակը ավելի հարմար է միջակայքերի համար, իսկ երկրորդը ավելի հաճախ օգտագործվում է սովորական կամ/կամ.

egrep «^» /etc/passwd

Այժմ ընտրենք բոլոր այն օգտվողներին, որոնց անունը երեք նիշ չէ: Օգտվողի անունը վերջանում է երկու կետով: Կարելի է ասել, որ այն կարող է պարունակել ցանկացած այբբենական նիշ, որը պետք է կրկնել երեք անգամ՝ երկու կետից առաջ.

egrep «^w(3):» /etc/passwd

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

Այս հոդվածում մենք լուսաբանեցինք Linux-ի կանոնավոր արտահայտությունները, բայց դա միայն հիմնականն էր: Եթե ​​մի փոքր խորանաք, ապա կտեսնեք, որ այս գործիքի միջոցով կարող եք շատ ավելի հետաքրքիր բաներ անել: Ժամանակ հատկացնել կանոնավոր արտահայտություններին տիրապետելու համար, անկասկած, արժե այն:

Եզրափակելով, Yandex-ի դասախոսությունը կանոնավոր արտահայտությունների մասին.

Linux տերմինալի ամենաօգտակար և գործառույթներով հարուստ հրամաններից մեկը «grep» հրամանն է: Grep-ը հապավում է, որը նշանակում է «գլոբալ կանոնավոր արտահայտության տպագիր» (այսինքն՝ «որոնել ամենուր կանոնավոր արտահայտությանը համապատասխանող տողեր և տպել դրանք»): Սա նշանակում է, որ grep-ը կարող է օգտագործվել՝ տեսնելու, թե արդյոք մուտքագրումը համապատասխանում է նշված օրինաչափություններին:

Այս աննշան թվացող ծրագիրը շատ հզոր է, երբ ճիշտ օգտագործվում է: Բարդ կանոնների վրա հիմնված մուտքերը տեսակավորելու նրա կարողությունը այն դարձնում է հայտնի օղակ շատ հրամանների շղթաներում:

Այս ձեռնարկը նայում է grep հրամանի որոշ հնարավորություններին, այնուհետև անցնում է կանոնավոր արտահայտությունների օգտագործմանը: Այս ուղեցույցում նկարագրված բոլոր տեխնիկաները կարող են կիրառվել վիրտուալ սերվերի կառավարման համար:

Օգտագործման հիմունքներ

Իր ամենապարզ ձևով grep-ն օգտագործվում է տառերի նախշերի համընկնում գտնելու համար տեքստային ֆայլ. Սա նշանակում է, որ եթե grep-ին տրվի որոնման բառ, այն կտպագրի ֆայլի յուրաքանչյուր տողը, որը պարունակում է այդ բառը:

Որպես օրինակ՝ դուք կարող եք օգտագործել grep՝ Ubuntu համակարգի GNU Ընդհանուր հանրային լիցենզիայի 3 տարբերակում «GNU» բառը պարունակող տողեր գտնելու համար:

cd /usr/share/common-licenses
grep «GNU» GPL-3
GNU ԸՆԴՀԱՆՈՒՐ ՀԱՆՐԱՅԻՆ ԼԻՑԵՆԶԻԱ





13. Օգտագործեք GNU Affero Ընդհանուր հանրային լիցենզիայի հետ:
GNU Affero Ընդհանուր հանրային լիցենզիայի 3 տարբերակի ներքո՝ սինգլում
...
...

Առաջին արգումենտը՝ «GNU», որոնվող օրինաչափությունն է, իսկ երկրորդը՝ «GPL-3»-ը մուտքագրված ֆայլն է, որը պետք է գտնել:

Արդյունքում, տեքստային օրինակ պարունակող բոլոր տողերը դուրս կգան: Որոշներում Linux բաշխումներայն նախշը, որը փնտրում եք, կնշվի ելքային տողերում:

Ընդհանուր ընտրանքներ

Լռելյայնորեն, grep հրամանը պարզապես որոնում է մուտքագրված ֆայլում խստորեն նշված օրինաչափությունները և տպում իր գտած տողերը: Այնուամենայնիվ, grep-ի վարքագիծը կարող է փոխվել՝ ավելացնելով որոշ լրացուցիչ դրոշներ:

Եթե ​​Ձեզ անհրաժեշտ է անտեսել որոնման պարամետրի մեծատառերը և որոնել օրինակի մեծատառ և փոքրատառ տատանումները, կարող եք օգտագործել «-i» կամ «--ignore-case» կոմունալ ծառայությունները:

Որպես օրինակ՝ դուք կարող եք օգտագործել grep՝ նույն ֆայլում մեծատառով, փոքրատառով կամ խառը տառերով գրված «լիցենզիա» բառը որոնելու համար:

grep -i «լիցենզիա» GPL-3
GNU ԸՆԴՀԱՆՈՒՐ ՀԱՆՐԱՅԻՆ ԼԻՑԵՆԶԻԱ
սույն լիցենզիայի փաստաթղթի, սակայն դրա փոփոխությունն անթույլատրելի է:
GNU Ընդհանուր հանրային լիցենզիան անվճար, copyleft լիցենզիա է
Լիցենզիաները մեծամասնության համարնախագծված են ծրագրային և այլ գործնական աշխատանքներ
GNU Ընդհանուր հանրային լիցենզիան նախատեսված է երաշխավորելու ձեր ազատությունը
GNU Ընդհանուր հանրային լիցենզիա մեր ծրագրաշարի մեծ մասի համար. դա վերաբերում է նաև


«Այս լիցենզիան» վերաբերում է GNU Ընդհանուր հանրային լիցենզիայի 3-րդ տարբերակին:
«Ծրագիրը» վերաբերում է ցանկացած հեղինակային իրավունքով պաշտպանված աշխատանքին, որը լիցենզավորված է սույն օրենքով
...
...

Ինչպես տեսնում եք, ելքը պարունակում է «LICENSE», «license» և «License»: Եթե ​​ֆայլում լիներ «LiCeNsE»-ի օրինակ, այն նույնպես կարտադրվեր:
Եթե ​​Ձեզ անհրաժեշտ է գտնել բոլոր տողերը, որոնք չեն պարունակում նշված օրինակը, կարող եք օգտագործել «-v» կամ «--invert-match» դրոշակները:

Որպես օրինակ, կարող եք օգտագործել հետևյալ հրամանը՝ BSD լիցենզիան որոնելու համար բոլոր տողերը, որոնք չեն պարունակում «the» բառը.

grep -v «the» BSD
Բոլոր իրավունքները պաշտպանված են:
Վերաբաշխում և օգտագործում սկզբնաղբյուր և երկուական ձևերով՝ առանց կամ առանց դրա
հանդիպում են:
կարող է օգտագործվել այս ծրագրաշարից ստացված արտադրանքները հաստատելու կամ առաջ մղելու համար
առանց հատուկ նախնական գրավոր թույլտվության:
ԱՅՍ ԾՐԱԳՐԵՐԸ ՏՐԱՄԱԴՐՎՈՒՄ ԵՆ ՌԵԳԵՆՏՆԵՐԻ ԵՎ ՆԵՐԴՐՈՂՆԵՐԻ ԿՈՂՄԻՑ «ԻՆՉՊԵՍ ԿԱ»» և
ՑԱՆԿԱՑԱԾ ՀԱՅՏԱՐԱՐ ԿԱՄ ՆԿՅԱԼԻ ԵՐԱՇԽԻՔՆԵՐ, ՆԵՐԱՌՅԱԼ, ԲԱՅՑ ՉՍԱՀՄԱՆԱՓԱԿՎԵԼՈՎ,
...
...

Ինչպես տեսնում եք, վերջին երկու տողերը դուրս են բերվել որպես «the» բառը չպարունակող, քանի որ «անտեսել գործը» հրամանը չի օգտագործվել:

Միշտ օգտակար է իմանալ տողերի համարները, որտեղ հայտնաբերվել են համընկնումները: Դրանք կարելի է գտնել օգտագործելով «-n» կամ «--line-number» դրոշները:

Եթե ​​կիրառեք այս դրոշը նախորդ օրինակում, կցուցադրվի հետևյալ արդյունքը.

grep -vn «the» BSD
2: Բոլոր իրավունքները պաշտպանված են:
3:
4. Վերաբաշխում և օգտագործում աղբյուրի և երկուական ձևերով՝ առանց կամ առանց
6: հանդիպում են:
13. կարող է օգտագործվել այս ծրագրաշարից ստացված արտադրանքները հաստատելու կամ գովազդելու համար
14. առանց հատուկ նախնական գրավոր թույլտվության:
15:
16: ԱՅՍ ԾՐԱԳՐԵՐԸ ՏՐԱՄԱԴՐՎՈՒՄ ԵՆ ՌԵՋԵՆՏՆԵՐԻ ԵՎ ՆԵՐԴՐՈՂՆԵՐԻ ԿՈՂՄԻՑ «ԻՆՉՊԵՍ ԿԱ»» և
17. ՑԱՆԿԱՑԱԾ ՀԱՅՏԱՐԱՐ ԿԱՄ ենթադրյալ ԵՐԱՇԽԻՔՆԵՐ, ՆԵՐԱՌՅԱԼ, ԲԱՅՑ ՉՍԱՀՄԱՆԱՓԱԿՎԵԼՈՎ,
...
...

Այժմ կարող եք հղում կատարել տողի համարին, երբ անհրաժեշտ է փոփոխություններ կատարել յուրաքանչյուր տողում, որը չի պարունակում «the»:

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

Ինչպես նշվեց ներածության մեջ, grep-ը նշանակում է «գլոբալ կանոնավոր արտահայտությունների տպագիր»: Կանոնավոր արտահայտությունը տեքստային տող է, որը նկարագրում է որոշակի որոնման օրինաչափություն:

Տարբեր հավելվածներ և ծրագրավորման լեզուներ մի փոքր այլ կերպ են օգտագործում կանոնավոր արտահայտությունները: Այս ձեռնարկն ընդգրկում է Grep-ի օրինաչափությունները նկարագրելու եղանակների միայն մի փոքր ենթախումբ:

Տառերի համընկնում

«GNU» և «the» բառերի որոնման վերը նշված օրինակներում փնտրվել են շատ պարզ կանոնավոր արտահայտություններ, որոնք ճշգրտորեն համընկնում են «GNU» և «the» նիշերի տողի հետ:

Ավելի ճիշտ է դրանք համարել որպես նիշերի տողերի համընկնումներ, քան բառերի համընկնումներ: Երբ դուք ծանոթանաք ավելի բարդ օրինաչափություններին, այս տարբերությունն ավելի նշանակալից կդառնա:

Տրված նիշերին ճշգրիտ համընկնող նախշերը կոչվում են «տառային» նախշեր, քանի որ դրանք համապատասխանում են օրինաչափությանը տառ առ տառ, նիշ առ նիշ:

Բոլոր այբբենական և թվային նիշերը (և որոշ այլ նշաններ) բառացիորեն համընկնում են, եթե դրանք չեն փոփոխվել արտահայտման այլ մեխանիզմներով:

Խարիսխի համընկնումներ

Խարիսխները հատուկ նիշեր են, որոնք ցույց են տալիս գտնվելու վայրը ցանկալի համընկնման տողում:

Օրինակ, կարող եք նշել, որ որոնման համար անհրաժեշտ են միայն «GNU» բառը հենց սկզբում պարունակող տողեր: Դա անելու համար հարկավոր է օգտագործել «^» խարիսխը տառի տողից առաջ:

Այս օրինակը տպում է միայն տողեր, որոնք սկզբում պարունակում են «GNU» բառը:

grep «^GNU» GPL-3
GNU Ընդհանուր հանրային լիցենզիա մեր ծրագրաշարի մեծ մասի համար. դա վերաբերում է նաև
GNU Ընդհանուր հանրային լիցենզիա, կարող եք ընտրել երբևէ հրապարակված ցանկացած տարբերակ

Նմանապես, «$» խարիսխը կարող է օգտագործվել բառացի տողից հետո՝ նշելու, որ համընկնումն վավեր է միայն այն դեպքում, եթե որոնվող նիշերի տողը գտնվում է տեքստային տողի վերջում:

Հետևյալ կանոնավոր արտահայտությունը տպում է միայն այն տողերը, որոնք վերջում պարունակում են «և».

grep «and$» GPL-3
որ այս անվճար ծրագրաշարի համար երաշխիք չկա: Երկու օգտագործողների համար» և
Պատճենման, տարածման և տարածման ճշգրիտ պայմաններն ու պայմանները


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

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

Ժամանակահատվածը (.) օգտագործվում է կանոնավոր արտահայտություններում՝ ցույց տալու համար, որ ցանկացած նիշ կարող է հայտնվել նշված վայրում:

Օրինակ, եթե ցանկանում եք գտնել համընկնումներ, որոնք պարունակում են երկու նիշ և այնուհետև «cept» հաջորդականությունը, դուք կօգտագործեք հետևյալ օրինակը.

grep «..cept» GPL-3
օգտագործումը, որը հենց այնտեղ է, որտեղ դա ամենաանընդունելի է: Հետեւաբար, մենք
Հեղինակային իրավունքի մասին գործող օրենքի համաձայն խախտում, բացառությամբ այն իրականացնելու ա
ասում է օգտագործողին, որ աշխատանքի համար երաշխիք չկա (բացառությամբ

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

Ինչպես տեսնում եք, արդյունքները ներառում են «ընդունել» և «բացառությամբ» բառերը, ինչպես նաև այս բառերի տատանումները: Օրինակը նույնպես կհամապատասխաներ «z2cept» հաջորդականությանը, եթե այն լիներ տեքստում:

Արտահայտություններ փակագծերում

Տեղադրելով նիշերի խումբ քառակուսի փակագծերի մեջ («»), կարող եք նշել, որ փակագծերի ցանկացած նիշ կարող է հայտնվել այդ դիրքում:

Սա նշանակում է, որ եթե ձեզ անհրաժեշտ է գտնել «too» կամ «երկու» պարունակող տողեր, կարող եք համառոտ նշել այս տատանումները՝ օգտագործելով հետևյալ օրինակը.

grep «դեպի» GPL-3
ձեր ծրագրերը նույնպես:

Ծրագրավորողները, որոնք օգտագործում են GNU GPL-ը, պաշտպանում են ձեր իրավունքները երկու քայլով.
համակարգչային ցանցը, առանց պատճենի փոխանցման, չի փոխանցվում:

Համապատասխան աղբյուր ցանցային սերվերից՝ անվճար:
...
...

Ինչպես տեսնում եք, երկու տատանումները հայտնաբերվել են ֆայլում:

Նիշերը փակագծերում դնելը նաև մի քանի օգտակար հատկություններ է տալիս: Կարող եք նշել, որ փակագծերում գտնվող նիշերից բացի ամեն ինչ համապատասխանում է օրինաչափությանը` փակագծերում նիշերի ցանկը սկսելով «^» նիշով:

IN այս օրինակումօգտագործվում է «.ode» կաղապարը, որը չպետք է համապատասխանի «code» հաջորդականությանը։

grep «[^c]ode» GPL-3
1. Աղբյուրի կոդը.
մոդել, յուրաքանչյուրին, ով տիրապետում է օբյեկտի կոդը, տալ կամ (1) ա
արտադրանքի օգտագործման միակ նշանակալի եղանակը:
նկատեք այսպես, երբ այն սկսվում է ինտերակտիվ ռեժիմով.

Հարկ է նշել, որ երկրորդ տողի ելքը պարունակում է «կոդ» բառը: Սա ռեգեքսի կամ grep սխալ չէ:

Ավելի շուտ, այս տողը տպագրվել է, քանի որ այն պարունակում է նաև «մոդել» բառի մեջ հայտնաբերված օրինաչափությանը համապատասխանող «ռեժիմ» հաջորդականությունը։ Այսինքն, տողը տպվել է, քանի որ այն համապատասխանում է օրինակին:

Եվս մեկ օգտակար հատկությունփակագծեր - յուրաքանչյուր նիշ առանձին մուտքագրելու փոխարեն նիշերի շարքը նշելու ունակություն:

Սա նշանակում է, որ եթե ձեզ անհրաժեշտ է գտնել յուրաքանչյուր տող, որը սկսվում է մեծատառով, կարող եք օգտագործել հետևյալ օրինակը.

grep «^» GPL-3
GNU Ընդհանուր հանրային լիցենզիա մեր ծրագրաշարի մեծ մասի համար. դա վերաբերում է նաև

Լիցենզիա. Յուրաքանչյուր լիցենզավորված անձի հասցեագրված է «դուք»: «Լիցենզիաներ» և


Համակարգային գրադարաններ կամ ընդհանուր նշանակության գործիքներ կամ ընդհանրապես հասանելի անվճար
Աղբյուր.

...
...

Որոշ ժառանգական տեսակավորման խնդիրների պատճառով՝ ավելին ճշգրիտ արդյունքԱվելի լավ է օգտագործել POSIX նիշերի դասերը վերը նշված օրինակում օգտագործված նիշերի տիրույթի փոխարեն:
Կան բազմաթիվ կերպարների դասեր, որոնք ներառված չեն այս ուղեցույցում. օրինակ, նույն ընթացակարգը կատարելու համար, ինչ վերը նշված օրինակում, կարող եք օգտագործել փակագծերում դրված «[:upper:]» նիշերի դասը:

grep «^[[:upper:]]» GPL-3
GNU Ընդհանուր հանրային լիցենզիա մեր ծրագրաշարի մեծ մասի համար. դա վերաբերում է նաև
Պետությունները չպետք է թույլ տան, որ արտոնագրերը սահմանափակեն դրանց մշակումն ու օգտագործումը
Լիցենզիա. Յուրաքանչյուր լիցենզավորված անձի հասցեագրված է «դուք»: «Լիցենզիաներ» և
Բաղադրիչ, և (բ) ծառայում է միայն դրա հետ աշխատանքն օգտագործելու հնարավորություն տալու համար
Հիմնական բաղադրիչը կամ ստանդարտ ինտերֆեյսի ներդրումը, որի համար a
Համակարգային գրադարաններ կամ ընդհանուր նշանակության գործիքներ կամ ընդհանրապես հասանելի անվճար
Աղբյուր.
Օգտագործողի արտադրանքը փոխանցվում է ստացողին հավերժական կամ ա
...
...

Կրկնել օրինակը (0 կամ ավելի անգամ)

Ամենատարածված մետանիշերից մեկը «*» նշանն է, որը նշանակում է «կրկնել նախորդ նիշը կամ արտահայտությունը 0 կամ ավելի անգամ»:

Օրինակ, եթե ցանկանում եք գտնել բացող կամ փակող փակագծերով յուրաքանչյուր տող, որը պարունակում է միայն տառեր և դրանց միջև միայնակ բացատներ, կարող եք օգտագործել հետևյալ արտահայտությունը.

grep «(*)» GPL-3

բաշխում (փոփոխմամբ կամ առանց փոփոխության), հասանելի դարձնելով ընկերությանը
քան աշխատանքը որպես ամբողջություն, որը (ա) ներառված է սովորական ձևի մեջ
Բաղադրիչ, և (բ) ծառայում է միայն դրա հետ աշխատանքն օգտագործելու հնարավորություն տալու համար
(եթե այդպիսիք կան), որոնց վրա գործարկվում է գործարկվող աշխատանքը, կամ կոմպիլյատորը, որն օգտագործվում է
(ներառյալ ֆիզիկական բաշխման կրիչը), ուղեկցվում է
(ներառյալ ֆիզիկական բաշխման միջավայրը), ուղեկցվում է ա
տեղադրեք (անվճար կամ վճարովի) և առաջարկեք համարժեք մուտք դեպի
...
...

Ինչպես խուսափել մետանիշերից

Երբեմն ձեզ կարող է անհրաժեշտ լինել փնտրել բառացի շրջան կամ բառացի բաց փակագծեր: Քանի որ կանոնավոր արտահայտություններում այս նիշերը հատուկ նշանակություն ունեն, դուք պետք է «փախչեք» դրանցից՝ grep-ին ասելով, որ դրանց հատուկ նշանակությունն այս դեպքում անհրաժեշտ չէ:

Այս նիշերը կարող են փախչել՝ օգտագործելով հետշեղ (\) նշանից առաջ, որը սովորաբար հատուկ նշանակություն ունի:

Օրինակ, եթե Ձեզ անհրաժեշտ է գտնել տող, որը սկսվում է մեծատառով և ավարտվում կետով, կարող եք օգտագործել ստորև բերված արտահայտությունը: Վերջին կետից առաջ «փախչել» հրամանը ցույց է տալիս, որ վերջին կետը ներկայացնում է բառացի կետ և չունի «ոչ մի նիշ» նշանակություն.

grep «^.*\.$» GPL-3
Աղբյուր.
Լիցենզիա՝ բացառություններ անելով դրա մեկ կամ մի քանի պայմաններից:
Լիցենզիան կնշանակի ամբողջությամբ ձեռնպահ մնալ Ծրագրի փոխանցումից:
ԲՈԼՈՐ ԱՆՀՐԱԺԵՇՏ ՍՊԱՍԱՐԿՈՒՄԸ, ՎԵՐԱՆՈՐՈԳՈՒՄԸ ԿԱՄ ՈՒՂՂՈՒՄԸ։
ՆՄԱՆ ՎՆԱՍՆԵՐ.
Նաև ավելացրեք տեղեկատվություն, թե ինչպես կապվել ձեզ հետ էլեկտրոնային և թղթային փոստով:

Ընդլայնված կանոնավոր արտահայտություններ

Grep հրամանը կարող է օգտագործվել նաև ընդլայնված կանոնավոր արտահայտությունների լեզվով` օգտագործելով -E դրոշը կամ grep-ի փոխարեն egrep հրամանը կանչելով:

Այս հրամանները բացում են «ընդլայնված կանոնավոր արտահայտությունների» հնարավորությունները։ Ընդլայնված կանոնավոր արտահայտությունները ներառում են բոլոր հիմնական մետանիշերը, ինչպես նաև լրացուցիչ մետանիշեր՝ ավելի բարդ համընկնումներ արտահայտելու համար:

Խմբավորում

Առավել պարզ և օգտակար հատկություններից մեկը, որը տալիս են ընդլայնված կանոնավոր արտահայտությունները, արտահայտությունները խմբավորելու և որպես մեկ միավոր օգտագործելու հնարավորությունն է:

Փակագծերը օգտագործվում են արտահայտությունները խմբավորելու համար: Եթե ​​դուք պետք է օգտագործեք փակագծեր ընդլայնված կանոնավոր արտահայտություններից դուրս, դրանք կարող են «փախչել»՝ օգտագործելով հետշեղը

grep «\(խմբավորում\)» file.txt
grep -E «(խմբավորում)» file.txt
egrep «(խմբավորում)» file.txt

Վերոնշյալ արտահայտությունները համարժեք են։

Այլընտրանք

Ինչպես քառակուսի փակագծերը նշում են տարբեր հնարավոր համընկնումներ մեկ նիշի համար, այնպես էլ միահյուսումը թույլ է տալիս նշել նիշերի տողերի կամ արտահայտությունների հավաքածուների այլընտրանքային համընկնումներ:

Ուղղահայաց գծի «|» նշանն օգտագործվում է հերթափոխը նշելու համար: Փոփոխությունը հաճախ օգտագործվում է խմբավորման մեջ՝ նշելու, որ երկուսից մեկը կամ ավելին հնարավոր տարբերակներըպետք է համարել պատահականություն.

Այս օրինակում դուք պետք է փնտրեք «GPL» կամ «General Public License»:

grep -E «(GPL|General Public License)» GPL-3
GNU Ընդհանուր հանրային լիցենզիան անվճար, copyleft լիցենզիա է
GNU Ընդհանուր հանրային լիցենզիան նախատեսված է երաշխավորելու ձեր ազատությունը
GNU Ընդհանուր հանրային լիցենզիա մեր ծրագրաշարի մեծ մասի համար. դա վերաբերում է նաև
գինը. Մեր ընդհանուր հանրային լիցենզիաները նախատեսված են համոզվելու համար, որ դուք
Ծրագրավորողները, որոնք օգտագործում են GNU GPL-ը, պաշտպանում են ձեր իրավունքները երկու քայլով.
Մշակողների և հեղինակների պաշտպանության համար GPL-ը հստակ բացատրում է
հեղինակների համար, GPL-ը պահանջում է, որ փոփոխված տարբերակները նշվեն որպես
նախագծել են GPL-ի այս տարբերակը՝ արգելելու պրակտիկան նրանց համար
...
...

Այլընտրանքը կարող է օգտագործվել երկու կամ ավելի տարբերակների միջև ընտրության համար. Դա անելու համար դուք պետք է մուտքագրեք մնացած ընտրանքները ընտրության խմբում՝ յուրաքանչյուրն առանձնացնելով «|» ուղղահայաց գծի նշանով:

Քանակականիչներ

Ընդլայնված կանոնավոր արտահայտություններում կան մետանիշեր, որոնք ցույց են տալիս, թե որքան հաճախ է կրկնվում նիշը, ինչպես «*» մետանիշը ցույց է տալիս, որ նախորդ նիշը կամ նիշերի տողը համապատասխանում է 0 կամ ավելի անգամ:

Նիշը 0 կամ ավելի անգամ համապատասխանելու համար կարող եք օգտագործել «?» նշանը: Այն կդարձնի նախորդ կերպարը կամ նիշերի շարքը ըստ էության ընտրովի:

Այս օրինակում, «պատճեն» հաջորդականությունը կամընտիր խմբում ներդնելով, ցուցադրվում են «հեղինակային իրավունք» և «աջ» համընկնումները.

grep -E «(պատճեն)?աջ» GPL-3
Հեղինակային իրավունք (C) 2007 Free Software Foundation, Inc.
Ձեր իրավունքները պաշտպանելու համար մենք պետք է կանխենք ուրիշների կողմից ձեզ մերժելը
այս իրավունքները կամ խնդրելով ձեզ զիջել իրավունքները: Հետեւաբար, դուք ունեք
գիտեն իրենց իրավունքները.
Ծրագրավորողները, որոնք օգտագործում են GNU GPL-ը, պաշտպանում են ձեր իրավունքները երկու քայլով.
(1) հաստատել ծրագրաշարի հեղինակային իրավունքը և (2) Ձեզ առաջարկել այս լիցենզիան
«Հեղինակային իրավունք» նշանակում է նաև հեղինակային իրավունքի նմանվող օրենքներ, որոնք կիրառվում են այլ տեսակի նկատմամբ
...
...

«+» նիշը 1 կամ ավելի անգամ համընկնում է արտահայտությունների հետ: Այն աշխատում է գրեթե «*» նշանի նման, բայց «+» օգտագործելիս արտահայտությունը պետք է համընկնի առնվազն 1 անգամ։

Հետևյալ արտահայտությունը համապատասխանում է «անվճար» տողին՝ գումարած 1 կամ ավելի նիշ, որոնք բացատ չեն.

grep -E «free[^[:space:]]+» GPL-3
GNU Ընդհանուր հանրային լիցենզիան անվճար, copyleft լիցենզիա է
խլել ստեղծագործությունները կիսելու և փոխելու ձեր ազատությունը: Ի հակադրություն,
GNU Ընդհանուր հանրային լիցենզիան նախատեսված է երաշխավորելու ձեր ազատությունը
Երբ մենք խոսում ենք ազատ ծրագրաշարի մասին, մենք նկատի ունենք ազատությունը, այլ ոչ
ազատ ծրագրային ապահովման պատճեններ տարածելու ազատություն ունեն (և վճար

ազատությունները, որոնք դուք ստացել եք: Դուք պետք է համոզվեք, որ նրանք նույնպես ստանան
պաշտպանելով օգտատերերին» ծրագրաշարը փոխելու ազատությունը: Համակարգված
GPL-ի, ըստ անհրաժեշտության՝ պաշտպանելու օգտատերերի ազատությունը:
արտոնագրերը չեն կարող օգտագործվել՝ ծրագիրը ոչ ազատ դարձնելու համար:

Խաղի կրկնությունների քանակը

Եթե ​​Ձեզ անհրաժեշտ է նշել, թե քանի անգամ պետք է կրկնվեն համընկնումները, կարող եք օգտագործել գանգուր փակագծեր (“( )”): Այս նշաններն օգտագործվում են արտահայտության համընկնումների թվի ճշգրիտ թիվը, միջակայքը և վերին և ստորին սահմանները նշելու համար:

Եթե ​​Ձեզ անհրաժեշտ է գտնել բոլոր տողերը, որոնք պարունակում են երեք ձայնավորների համադրություն, կարող եք օգտագործել հետևյալ արտահայտությունը.

grep -E «(3)» GPL-3
փոխվել է, որպեսզի նրանց խնդիրները սխալմամբ չվերագրվեն
նախորդ տարբերակների հեղինակները։
ստանալ այն, ցանկացած միջավայրում, պայմանով, որ դուք ակնհայտորեն և
տալ նախորդ պարբերության համաձայն՝ գումարած դրա տիրապետման իրավունքը
ծածկված աշխատանք, որպեսզի միաժամանակ բավարարեք սույնով նախատեսված ձեր պարտավորությունները
Եթե ​​Ձեզ անհրաժեշտ է գտնել 16-20 նիշից բաղկացած բոլոր բառերը, օգտագործեք հետևյալ արտահայտությունը.
grep -E «[[:alpha:]](16,20)» GPL-3
որոշակի պարտականություններ, եթե դուք տարածում եք ծրագրաշարի պատճենները, կամ եթե
դուք փոփոխում եք այն՝ ուրիշների ազատությունը հարգելու պարտականություններ:
գ) այդ նյութի ծագման խեղաթյուրման արգելում, կամ

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

Շատ դեպքերում grep հրամանը օգտակար է ֆայլերի կամ հիերարխիայի մեջ օրինաչափություններ գտնելու համար ֆայլային համակարգ. Այն խնայում է շատ ժամանակ, ուստի արժե ծանոթանալ դրա պարամետրերին և շարահյուսությանը:

Կանոնավոր արտահայտությունները նույնիսկ ավելի բազմակողմանի են և կարող են օգտագործվել շատերի մեջ հայտնի ծրագրեր. Օրինակ՝ շատերը տեքստային խմբագիրներօգտագործել կանոնավոր արտահայտություններ տեքստը որոնելու և փոխարինելու համար:

Ավելին, առաջադեմ ծրագրավորման լեզուներն օգտագործում են կանոնավոր արտահայտություններ՝ տվյալների որոշակի կտորների վրա ընթացակարգեր իրականացնելու համար: Սովորական արտահայտությունների հետ աշխատելու իմացությունը օգտակար է համակարգչի հետ կապված ընդհանուր խնդիրներ լուծելիս:

Tags:

grep կոմունալը շատ հզոր որոնման և զտիչ գործիք է: տեքստային տեղեկատվություն. Այս հոդվածը ցույց է տալիս դրա օգտագործման մի քանի օրինակներ, որոնք թույլ կտան գնահատել դրա հնարավորությունները:
grep-ի հիմնական օգտագործումը ֆայլերում և ելքային հոսքերում բառեր կամ արտահայտություններ որոնելն է: Դուք կարող եք որոնել՝ մուտքագրելով հրամանի տողհարցման և որոնման տարածք (ֆայլ):
Օրինակ, hystack.txt ֆայլում «ասեղ» տողը գտնելու համար օգտագործեք հետևյալ հրամանը.

$ grep ասեղ haystack.txt

Արդյունքում, grep-ը կցուցադրի ասեղի բոլոր դեպքերը, որոնք նա հանդիպում է haystack.txt ֆայլի բովանդակության մեջ: Կարևոր է նշել, որ այս դեպքում grep-ը փնտրում է նիշերի մի շարք, ոչ թե բառ: Օրինակ, կցուցադրվեն տողեր, որոնք ներառում են «անպետք» բառը և այլ բառեր, որոնք պարունակում են «ասեղ» հաջորդականությունը:


grep-ին ասելու համար, որ դուք կոնկրետ բառ եք փնտրում, օգտագործեք -w անջատիչը: Այս ստեղնը կսահմանափակի որոնումը միայն նշված բառով: Բառը երկու կողմից սահմանազատված հարցում է ցանկացած բացատով, կետադրական նշանով կամ տողերի ընդմիջումներով:

$ grep -w ասեղ haystack.txt

Անհրաժեշտ չէ որոնումը սահմանափակել միայն մեկ ֆայլով. -n անջատիչը կավելացնի նաև տողի համարը, որում գտնվել է համընկնում, իսկ -r անջատիչը թույլ կտա կատարել ռեկուրսիվ որոնում: Սա շատ հարմար է ծրագրի կոդերով ֆայլերի մեջ որոնելիս:

$ grep -rnw function_name /home/www/dev/myprogram/

Ֆայլի անունը նշված կլինի յուրաքանչյուր համընկնումից առաջ: Եթե ​​Ձեզ անհրաժեշտ է թաքցնել ֆայլերի անունները, օգտագործեք -h անջատիչը, ընդհակառակը, եթե ձեզ անհրաժեշտ են միայն ֆայլերի անուններ, ապա նշեք -l անջատիչը:
Հետևյալ օրինակում մենք կփնտրենք URL-ներ IRC log ֆայլում և ցույց կտանք վերջին 10 համընկնումները:

$ grep -wo http://.* channel.log | պոչը

-o տարբերակը grep-ին հուշում է տպել միայն նախշի համընկնումն ու ոչ թե ամբողջ տողը: Օգտագործելով խողովակը, մենք grep-ի ելքը վերահղում ենք դեպի tail հրամանը, որը լռելյայնորեն թողարկում է վերջին 10 տողը:
Այժմ մենք կհաշվենք որոշակի օգտատերերի կողմից irc ալիքին ուղարկված հաղորդագրությունների քանակը: Օրինակ, բոլոր հաղորդագրությունները, որոնք ես ուղարկել եմ տնից և աշխատանքից: Նրանք տարբերվում են մականունով, տանը ես օգտագործում եմ user_at_home մականունը, իսկ աշխատավայրում՝ user_at_work:

$ grep -c «^user_at_(տուն|աշխատանք)» channel.log

-c տարբերակով grep-ը տպում է միայն գտնված համընկնումների քանակը, այլ ոչ թե համընկնումները: Որոնման տողը փակված է չակերտների մեջ, քանի որ այն պարունակում է հատուկ նիշեր, որոնք կարող են ճանաչվել կեղևի կողմից որպես հսկիչ նիշ: Խնդրում ենք նկատի ունենալ, որ չակերտները ներառված չեն որոնման օրինակում: «» հակադարձ կտրվածքն օգտագործվում է հատուկ նիշերից խուսափելու համար:
Եկեք որոնենք հաղորդագրություններ այն մարդկանցից, ովքեր սիրում են «գոռալ» ալիքում: «Ճիչ» ասելով նկատի ունենք շիկահեր ոճով գրված հաղորդագրությունները՝ բոլոր ՄԵԾԱՏառերով։ Հապավումների պատահական հարվածները որոնումից բացառելու համար մենք կփնտրենք հինգ և ավելի նիշերից բաղկացած բառեր.

$ grep -w «+(5,)» channel.log

Ավելի մանրամասն նկարագրության համար կարող եք դիմել grep man էջին:
Եվս մի քանի օրինակ.

# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash օպերատոր:x:11:0:operator:/root:/sbin/nologin

Ցուցադրում է տողեր /etc/passwd ֆայլից, որոնք պարունակում են լարային արմատ:

# grep -n արմատ /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 12:operator:x:11:0:operator:/root:/sbin/nologin

Բացի այդ, ցուցադրվում են այն տողերի համարները, որոնք պարունակում են որոնված տողը:

# grep -v bash /etc/passwd | grep -v nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin :/sbin/halt news:x:9:13:news:/var/spool/news: mailnull:x:47:47::/var/spool/mqueue:/dev/null xfs:x:43:43: X տառատեսակի սերվեր:/etc/X11/fs:/bin/false rpc:x:32:32:Portmapper RPC օգտվող:/:/bin/false nscd:x:28:28:NSCD Daemon:/:/bin/false named:x:25:25:Named:/var/named:/bin/false squid:x:23:23::/var/spool/squid:/dev/null ldap:x:55:55:LDAP User: /var/lib/ldap:/bin/false apache:x:48:48:Apache:/var/www:/bin/false

Ստուգում է, թե որ օգտատերերը չեն օգտագործում bash-ը, բացառելով այն օգտատերերի հաշիվները, որոնցում nologin նշված է որպես shell:

# grep -c false /etc/passwd 7

Հաշվում է այն հաշիվների թիվը, որոնք ունեն /bin/false-ը որպես պատյան:

# grep -i խաղեր ~/.bash* | grep -v պատմություն

Այս հրամանը ցուցադրում է տողեր ընթացիկ օգտագործողի գլխավոր գրացուցակի բոլոր ֆայլերից, որոնց անունները սկսվում են ~/.bash-ով, բացառությամբ այն ֆայլերի, որոնց անունները ներառում են տողերի պատմությունը, որպեսզի բացառվեն ~/.bash_history-ում գտնված համընկնումները, որոնցում կարող է նշվել նույն տողը: մեծ կամ փոքրատառով. Խնդրում ենք նկատի ունենալ, որ «խաղեր» բառի որոնումն իրականացվում է, փոխարենը կարող եք փոխարինել որևէ այլ բառ:
grep հրամանը և կանոնավոր արտահայտությունները

Ի տարբերություն նախորդ օրինակի, մենք այժմ կցուցադրենք միայն այն տողերը, որոնք սկսվում են «արմատ» տողով.

# grep ^root /etc/passwd root:x:0:0:root:/root:/bin/bash

Եթե ​​ցանկանում ենք տեսնել, թե որ հաշիվներն ընդհանրապես չեն օգտագործել shell-ը, մենք փնտրում ենք «:» նիշով վերջացող տողեր.

# grep:$ /etc/passwd news:x:9:13:news:/var/spool/news:

Ստուգելու համար, թե արդյոք այն արտահանվում է ~/.bashrc ֆայլում PATH փոփոխական, նախ ընտրեք «արտահանում» ունեցող տողերը, այնուհետև գտեք «PATH» տողով սկսվող տողերը; այս դեպքում MANPATH-ը և մյուսները չեն ցուցադրվի հնարավոր ուղիները:

# grep արտահանում ~/.bashrc | grep "PATH" արտահանում PATH="/bin:/usr/lib/mh:/lib:/usr/bin:/usr/local/bin:/usr/ucb:/usr/dbin:$PATH"

Նիշերի դասեր

Քառակուսի փակագծերում արտահայտությունը նիշերի ցանկ է, որը կցված է [" և "]" նիշերի մեջ: Այն համապատասխանում է այս ցանկում նշված ցանկացած նիշի. եթե ցուցակի առաջին նիշը «^» է, ապա այն համապատասխանում է ցանկացած նիշի, որը ՉԻ ցանկում: Օրինակ, «» կանոնավոր արտահայտությունը համապատասխանում է ցանկացած մեկ թվանշանի:

Քառակուսի փակագծերում դրված արտահայտության մեջ կարող եք նշել տիրույթ, որը բաղկացած է երկու նիշից, որոնք բաժանված են գծիկով: Այնուհետև արտահայտությունը համապատասխանում է ցանկացած սինգլտոնի, որը, ըստ տեսակավորման կանոնների, ընկնում է այս երկու նիշերի ներսում, ներառյալ այս երկու նիշերը. սա հաշվի է առնում տեղանքում նշված համադրումը և նիշերի հավաքածուն: Օրինակ, երբ լռելյայն տեղայնացումը C է, «» արտահայտությունը համարժեք է «» արտահայտությանը։ Կան բազմաթիվ լոկալներ, որոնցում տեսակավորումը կատարվում է բառարանի հերթականությամբ, և այդ տեղանքներում «»-ն ընդհանուր առմամբ համարժեք չէ «»-ին, որտեղ, օրինակ, այն կարող է համարժեք լինել «» արտահայտությանը: Փակագծված արտահայտության ավանդական մեկնաբանությունն օգտագործելու համար կարող եք օգտագործել C տեղայնությունը՝ LC_ALL միջավայրի փոփոխականը «C» դնելով:

Վերջապես, կան հատուկ անվանված նիշերի դասեր, որոնք նշված են արտահայտությունների ներսում՝ քառակուսի փակագծերում: Լրացուցիչ տեղեկություններԱյս նախապես սահմանված արտահայտությունների մասին տեղեկությունների համար տե՛ս man pages կամ grep հրամանի փաստաթղթերը:

# grep /etc/group sys:x:3:root,bin,adm tty:x:5: mail:x:12:mail, postfix ftp:x:50: ոչ ոք:x:99: floppy:x:19: xfs:x:43: nfsnobody:x:65534: postfix:x:89:

Օրինակը ցույց է տալիս բոլոր տողերը, որոնք պարունակում են կամ «y» կամ «f» նիշը:
Ունիվերսալ կերպարներ (մետանիշեր)

Օգտագործեք «»: ցանկացած կերպարի համապատասխանելու համար: Եթե ​​ցանկանում եք բառարանից վերցված բոլոր անգլերեն բառերի ցանկը, որը պարունակում է հինգ նիշ՝ սկսած «c»-ով և վերջանում «h»-ով (օգտակար խաչբառեր լուծելու համար).

# grep " « /usr/share/dict/words catch clash cloth coach couch cough crash crush

Եթե ​​ցանկանում եք ցուցադրել տողերը, որոնք պարունակում են կետի նիշ որպես բառացի, ապա նշեք -F տարբերակը grep հրամանում: Նշաններ»< " и «>«նշանակում է դատարկ տողի առկայություն նշված տառերից առաջ և, համապատասխանաբար, հետո: Սա նշանակում է, որ բառերի ֆայլի բառերը պետք է համապատասխանաբար գրվեն: Եթե ​​ցանկանում եք գտնել տեքստի բոլոր բառերը ըստ նշված օրինաչափությունների՝ առանց դատարկ տողերը հաշվի առնելու, բաց թողեք նշանները:< " и «>», ավելին ճշգրիտ որոնումմիայն բառերն են օգտագործում -w անջատիչը:

Նմանապես գտնելու համար բառեր, որոնք կարող են ունենալ ցանկացած թվով նիշ «c»-ի և «h»-ի միջև, օգտագործեք աստղանիշը (*): Ստորև բերված օրինակը համակարգային բառարանից ընտրում է բոլոր բառերը, որոնք սկսվում են «c»-ով և ավարտվում «h»-ով.

# grep " « /usr/share/dict/words խալիֆ կանխիկ բռնել շոռակարկանդակ cheetah --արտադրությունը բաց է թողնվել--

Եթե ​​ցանկանում եք գտնել աստղանիշի բառացի նիշը ֆայլում կամ ելքային հոսքում, օգտագործեք միայնակ չակերտներ՝ այն գտնելու համար: Ստորև բերված օրինակում օգտագործողը նախ փորձում է փնտրել «աստղանիշ» /etc/profile ֆայլում՝ առանց չակերտների օգտագործելու, ինչի արդյունքում ոչինչ չի գտնվել: Երբ օգտագործվում են չակերտներ, արդյունքը ստացվում է.

# grep * /etc/profile # grep "*" /etc/profile համար i-ում /etc/profile.d/*.sh ; անել