Աքը ավելի լավ է, քան գրեպը

Ես ուզում եմ ձեզ պատմել մեկ որոնման օգտակար ծրագրի մասին, որը մեծապես հեշտացնում է կյանքը: Երբ ես հասնում եմ սերվեր և ես պետք է ինչ-որ բան փնտրեմ, առաջին բանը, որ անում եմ, ստուգում եմ, թե արդյոք ack-ը տեղադրված է: Այս կոմունալը հիանալի փոխարինում է grep-ին, ինչպես նաև որոշ չափով find-ին և wc-ին: Ինչու՞ չգրել: Ack-ն ունի ավելի գեղեցիկ կարգավորումներ, ավելի շատ մարդու կողմից ընթեռնելի ընտրանքներ, perl regex և կազմաձևման համակարգ: Եթե ​​ձեզ դուր է գալիս (պետք է) որոնել տերմինալի միջոցով, ապա դուք անպայման պետք է փորձեք այն:

Հիմնական հատկանիշները

Ack-ը լռելյայնորեն ռեկուրսիվ է, և ավելի քիչ տարբերակներ գրելը միշտ լավ գաղափար է:

Մենք կարող ենք օգտագործել դրոշը -wասել, որ օգտակարը փնտրի մեր օրինաչափության օրինակը, որը շրջապատված է բառերի սահմաններով (սպիտակ տարածություն, շեղեր և այլն):

ack -w mysql

Աքը ավելի լավ է, քան գրեպը

Ack-ն աջակցում է որոնումն ըստ ֆայլի տեսակի: Օրինակ՝ json ֆայլերում գտնենք մոդուլի տարբերակը։

ack --json '"version":s+"d+.d+.d+"'

Աքը ավելի լավ է, քան գրեպը

Աջակցվող ֆայլերի տեսակների ամբողջական ցանկը կարելի է դիտել՝

ack --help-types

Հաճախ անհրաժեշտ է հաշվել, թե քանի անգամ է արտահայտությունը հայտնվում գրանցամատյանում, օրինակ՝ հասկանալու համար, թե սկրիպտը որքան տվյալ է մշակել:

Աքը ավելի լավ է, քան գրեպը
Մենք հաշվում ենք, թե քանի անգամ է պրոցեսը տեղի ունենում test.log ֆայլում՝ չհաշված գործը (-i).

Մենք կարող ենք դեպքերը հաշվել ոչ միայն մեկ կոնկրետ ֆայլում, այլ խմբում: Եկեք ավարտենք mysql բառի նախորդ որոնումը. հաշվել բառերի քանակը () *.js ֆայլերում (--js), բացառությամբ ֆայլերի, որոնցում ոչինչ չի հայտնաբերվել (-h) և ամփոփելով արդյունքը:

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Աքը ավելի լավ է, քան գրեպը

Բացի այդ, մենք կարող ենք մանրամասն հաշվետվություն ստանալ յուրաքանչյուր ֆայլում տեղի ունեցած դեպքերի քանակի վերաբերյալ՝ օգտագործելով (-l)

ack --js -w -cl mysql

Աքը ավելի լավ է, քան գրեպը

Եթե ​​Ձեզ անհրաժեշտ է լրացուցիչ համատեքստ Ձեր որոնման համար, կարող եք խնդրել ընդունել
ցույց տալ տողերը մինչև (-B) եւ հետո (-A) գտնված արտահայտության. Դա անելու համար դուք պետք է ընտրանքից հետո նշեք տողերի քանակը, որոնք պետք է ցուցադրվեն:

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Աքը ավելի լավ է, քան գրեպը

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Աքը ավելի լավ է, քան գրեպը

Եվ եթե ձեզ անհրաժեշտ են երկուսն էլ, ապա օգտագործեք ()

ack --js --column -C 2 "query.once('" ./lib/

Կա նաև տարբերակ (-v) որոնումը շրջելու համար, այսինքն՝ ցույց տալ տողեր, որոնք չեն պարունակում տվյալ օրինաչափություն։

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

Ack-ը, ի տարբերություն grep-ի, օգտագործում է Perl-ի համատեղելի արտահայտություններ։
Ինձ համար սա մեծ պլյուս է, ես չպետք է հիշեմ առանձին շարահյուսություն կանոնավոր արտահայտությունների համար:

ack 'vars+adds+'

Աքը ավելի լավ է, քան գրեպը

Ավելի բարդ օրինակ

ack '*s+[vd+.d+.d+]'

Աքը ավելի լավ է, քան գրեպը

Հաճախ դուք ցանկանում եք արդյունքներում թողնել միայն այն, ինչը համապատասխանում է ձևանմուշին: --output տարբերակը կօգնի այստեղ (-o)

ack -o '*s+[vd+.d+.d+]'

Աքը ավելի լավ է, քան գրեպը

Բացի այդ, փակագծերի միջոցով մենք կարող ենք ընտրել գտնված մասը և մուտք գործել այն $[group number] փոփոխականի միջոցով: Օրինակ,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Աքը ավելի լավ է, քան գրեպը

Ack-ն ունի օգտակար տարբերակներ -- տիրույթ-սկիզբ и - միջակայք-վերջ. Նրանք օգնում են, երբ
Տվյալները պահվում են ոչ թե մեկ տողով, այլ բազմատողով։

Օրինակ, կա sql կոդով ֆայլ

Աքը ավելի լավ է, քան գրեպը

Եկեք հանենք սյունակների անունները: Բլոկի սկիզբը կլինի SELECT-ով սկսվող տող, իսկ վերջը՝ FROM-ով սկսվող տող:

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Աքը ավելի լավ է, քան գրեպը

Եթե ​​որոնման արտահայտությունը պարունակում է հատուկ նիշեր, ինչպիսիք են կետը, փակագիծը և այլ նիշեր, ապա դրանցից չխուսափելու համար օգտագործելով , կարող եք օգտագործել տարբերակը -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Աքը ավելի լավ է, քան գրեպը

Ֆայլերի հետ աշխատելը

Ստացեք ֆայլերի ցուցակ հատուկ ընդլայնմամբ

ack -f --js

Աքը ավելի լավ է, քան գրեպը

Գտեք բոլոր js ֆայլերը, որոնց անունը սկսվում է P*-ով, օգտագործելով տարբերակը (-g).

ack -g --js '/Pa.+.js$'

Աքը ավելի լավ է, քան գրեպը

Տեսիլ

Կոմունալն ունի իր կազմաձևման ֆայլը: Դուք կարող եք ունենալ և՛ գլոբալ կոնֆիգուրացիա՝ օգտագործողի համար (~/.ackrc), և՛ տեղական՝ կոնկրետ թղթապանակի համար (դուք պետք է թղթապանակում ստեղծեք .ackrc ֆայլ):

Ընտրանքների մեծ մասը, որոնք գրված են կազմաձևերում, կարելի է ձեռքով նշել, երբ կանչվում է: Դիտարկենք դրանցից մի քանիսը:

Անտեսել թղթապանակը որոնելիս

--ignore-dir=dist

Եկեք ավելացնենք հատուկ ֆայլի տեսակ -vue:

--type-add=vue:ext:js,vue

Այժմ դուք կարող եք օգտագործել --vue տարբերակը ֆայլեր որոնելու համար .vue. Օրինակ: ack --vue հավելված.
Այս տարբերակի համար կարող եք նշել ընդլայնումների ցանկը: Օրինակ, այստեղ, երբ -vue-ն օգտագործելիս կմշակվի հետևյալը.
.js ֆայլեր:

Անտեսեք ֆայլերը, օրինակ՝ minified *.min.js

--ignore-file=match:/.min.js$/

Տեղակայում

CentOS

yum update -y && yum install ack -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

Տեղադրում կայքից

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Փլագիններ խմբագիրների համար.

Ամփոփում

Սրանք բոլոր հնարավորությունները չեն։ Գործառույթների ամբողջական ցանկը կարելի է դիտել՝ գործարկելով.

ack –-help
# или
ack --man

Ack կոմունալը թույլ է տալիս տերմինալում որոնումը դարձնել ավելի հարմար և ճկուն: Եվ օգտագործելով խողովակաշարը (ack -C 10 բարև | ack աշխարհը) կարող եք ստեղծել հզոր կոմբինատ ֆայլային համակարգում և հենց ֆայլերում տվյալների որոնման և զտման համար:

Source: www.habr.com

Добавить комментарий