grep vs egrep vs fgrep. Ո՞րն է տարբերությունը:


grep, egrep, fgrep. Նրանք բոլորը նման են հնչում: Այսպիսով, ո՞րն է տարբերությունը:

Կարծում եմ, դուք արդեն ծանոթ եք grep հրամանին: Կարող է պատահել, որ դուք կարող եք հանդիպել այնպիսի տերմինների, ինչպիսիք են egrep և fgrep որոշ ինտերնետային ֆորումի քննարկումներում և մտածել, թե որոնք են այս հրամանները և արդյոք դրանք կապված են grep-ի հետ:

Այս ձեռնարկում ես կքննարկեմ այս grep տարբերակները՝ բացատրելով տարբերությունն ու նմանությունները:

Ի՞նչ է egrep-ը և fgrep-ը: Ո՞րն է տարբերությունը grep-ի, egrep-ի և fgrep-ի միջև:

e-ը egrep-ում նշանակում է ընդլայնված, իսկ f-ը fgrep-ում նշանակում է ֆիքսված: egrep-ը թույլ է տալիս օգտագործել ընդլայնված ռեգեքս, իսկ fgrep-ն ընդհանրապես թույլ չի տալիս ռեգեքսը:

Այս ամենն ավելի իմաստ կունենա շուտով, երբ ես դրանք բացատրեմ օրինակներով։

Դուք գիտեք, որ grep-ն աշխատում է ռեգեքսի վրա: Բայց դա ամբողջական ճշմարտությունը չէ:

Լռելյայնորեն, grep հրամանն աշխատում է հիմնական կանոնավոր արտահայտությունների վրա: Եթե ցանկանում եք ավելի բարդ որոնում, դուք պետք է օգտագործեք ընդլայնված կանոնավոր արտահայտություն: Տեսեք տարբերությունը հիմնական և ընդլայնված ռեգեքսի միջև:

Egrep հրամանը թույլ է տալիս օգտագործել ընդլայնված ռեգեքս:

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

Թեև դուք դեռ կարող եք տեսնել egrep և fgrep բնության մեջ, դրանց կարգավիճակը հնացած է: Շատ համակարգեր դեռ ներառում են այս տարբերակների երկուականները:

Այնուամենայնիվ, այժմ POSIX ստանդարտն է օգտագործել ստանդարտ grep հատուկ ընտրանքային դրոշներով (-E կամ -F): Այս դրոշներն օգնում են ստանդարտ grep-ին ընդօրինակել յուրաքանչյուր համապատասխան հրամանի ֆունկցիոնալությունը:

Ամփոփել:

  • egrep և fgrep հնացած հրամաններ են և պետք է խուսափել դրանցից:

  • egrep-ը համարժեք է grep -E հրամանին և թույլ է տալիս օգտագործել ընդլայնված ռեգեքս:

  • fgrep-ը համարժեք է grep -F հրամանին և այն օգտագործում է ֆիքսված տող որոնման համար և հետևաբար ավելի արագ որոնում է կատարում:

Հասկանալով grep-ի, egrep-ի և fgrep-ի տարբերությունը օրինակով

Ես ստեղծել եմ կարճ տեքստային ֆայլ՝ ցույց տալու այս grep տարբերակների միջև եղած տարբերությունները:

christopher@linux-handbook:~$ cat test.txt 
this is a tasty test

Ստանդարտ grep հրաման

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

Ենթադրենք, ես ուզում եմ որոնել կամ tast կամ test: Սա այն է, ինչ ես կարող եմ օգտագործել.

christopher@linux-handbook:~$ grep 't\(a\|e\)st' test.txt

Ուշադրություն դարձրեք, թե ինչպես պետք է փախչել փակագծերից: Սա շատ ավելի հեշտ է դիտարկել և հասկանալ ընդլայնված ռեգեքսի միջոցով:

Ընդլայնված Grep՝ Egrep կամ grep -E

Egrep-ը ստեղծվել է մետա-նիշերի համար ընդլայնվածաջակցություն ապահովելու համար: Սա նշանակում է, որ այն լռելյայնորեն խուսափում է այս հատուկ նիշերից: Սա խնայում է ժամանակը և ընդհանուր առմամբ հեշտացնում է արտահայտությունները ընթեռնելի:

Վերևում օգտագործածս հրամանը կարող է վերագրվել որպես շատ ավելի ընթեռնելի.

christopher@linux-handbook:~$ egrep 't(a|e)st' test.txt

Egrep երկուականը հետևողականորեն չի աջակցում { նիշը: Սա կարող է հանգեցնել անսպասելի վարքագծի:

Egrep-ի որոշ տարբերակներ թույլ են տալիս դրանք ճիշտ մեկնաբանել որպես բառացի նիշեր, եթե դրանք դուրս են գրվել (\{): Այնուամենայնիվ, բառացի {-ին համապատասխանեցնելու լավագույն գործելակերպը քառակուսի փակագծերի մեջ փակցնելն է [{]:

Fixed Grep. Fgrep կամ grep -F

Ծրագրային ապահովման մասնագետները գիտեն, որ նույնիսկ այն դեպքում, երբ հաշվողական հնարավորությունները խորապես աճել են, օպտիմալացումը երբեք չի կարող անտեսվել: Grep-ը շատ հզոր գործիք է, բայց երբեմն այն կարող է անհարկի օգտագործել համակարգի ռեսուրսները:

Այստեղից էլ ծագեց ֆիքսված grep-ի գաղափարը: Այս ծրագրաշարը իդեալական է այն դեպքերում, երբ դուք պետք է համապատասխանեցնեք ճշգրիտ տողը:

Այն չի ներկայացնում grep-ի մյուս տարբերակների հզոր արտահայտչական գործիքները: Այդ թուլությունն իրականում գերուժ է: Սա գործիքը շատ ավելի արագ է դարձնում:

Ինչպես արդեն նշեցի, դուք պետք է խուսափեք egrep և fgrep օգտագործելուց, քանի որ դրանք հնացած հրամաններ են: Օգտագործելով grep -E և grep -F-ն առաջընթացի ճանապարհն է:

Հուսով եմ, որ դուք հիմա ավելի լավ եք հասկանում grep-ը, egrep-ը և fgrep-ը: Եթե ավելացնելու բան ունեք, խնդրում ենք ազատ զգալ թողնել մեկնաբանություն: