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-ը: Եթե ավելացնելու բան ունեք, խնդրում ենք ազատ զգալ թողնել մեկնաբանություն: