Ack grepге караганда жакшыраак

Мен сизге жашоону абдан жеңилдеткен бир издөө программасы жөнүндө айткым келет. Мен серверге келгенде жана мен бир нерсе издөөм керек болгондо, биринчи жолу ack орнотулганын текшерүү. Бул утилита grep үчүн эң сонун алмаштыруучу, ошондой эле кандайдыр бир деңгээлде find жана wc. Эмне үчүн grep эмес? Ack'те жакшыраак орнотуулар, адам окуй турган көбүрөөк параметрлер, Perl regex жана конфигурациялоо системасы бар. Эгер сиз терминал аркылуу издөөнү кааласаңыз (керек болсо), анда сөзсүз түрдө аракет кылышыңыз керек.

Негизги өзгөчөлүктөрү

Ack демейки боюнча рекурсивдүү жана азыраак варианттарды жазуу дайыма жакшы идея.

Биз желек колдоно алабыз -wутилитага сөз чектери менен курчалган үлгүбүздүн үлгүсүн издөөнү айтууга (боштук, сызыктар ж.б.).

ack -w mysql

Ack grepге караганда жакшыраак

Ack файл түрү боюнча издөөнү колдойт. Мисалы, json файлдарынан модулдун версиясын табалы.

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

Ack grepге караганда жакшыраак

Колдоого алынган файл түрлөрүнүн толук тизмесин колдонуу менен көрүүгө болот:

ack --help-types

Көбүнчө скрипт канча маалымат иштеткенин түшүнүү үчүн, мисалы, журнал файлында фразанын канча жолу пайда болоорун санашыңыз керек.

Ack grepге караганда жакшыраак
Биз тест.log файлында процесс канча жолу болуп жатканын эсепке албайбыз (-i).

Биз окуяларды бир эле файлда эмес, топтун ичинде санай алабыз. Келгиле, mysql сөзү боюнча мурунку издөөнү жыйынтыктайлы: сөздөрдүн пайда болушунун санын эсептейли (-ден) *.js файлдарында(--js), эч нерсе табылбаган файлдарды кошпогондо (-h) жана жыйынтыгын чыгаруу.

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

Ack grepге караганда жакшыраак

Мындан тышкары, биз ар бир файлдагы көрүнүштөрдүн саны боюнча деталдуу отчетту ((-l)

ack --js -w -cl mysql

Ack grepге караганда жакшыраак

Эгер издөөңүз үчүн кошумча контекст керек болсо, акк деп сурасаңыз болот
чейин саптарды көрсөтүү (-B) жана кийин (-A) табылган туюнтма. Бул үчүн, параметрден кийин көрсөтүлүшү керек болгон саптардын санын көрсөтүү керек.

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

Ack grepге караганда жакшыраак

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

Ack grepге караганда жакшыраак

Эгер сизге экөө тең керек болсо, анда колдонуңуз (-WITH)

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

варианты да бар(-v) издөөнү инверсиялоо, б.а. берилген үлгүнү камтыбаган саптарды көрсөтүү.

Регулярдуу туюнтма

Ack, grepден айырмаланып, Perlге туура келген туюнтмаларды колдонот.
Мен үчүн бул чоң плюс; мен кадимки туюнтмалар үчүн өзүнчө синтаксисти эстеп отуруунун кереги жок.

ack 'vars+adds+'

Ack grepге караганда жакшыраак

Дагы татаал мисал

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

Ack grepге караганда жакшыраак

Көбүнчө сиз жыйынтыктарга үлгүгө дал келген нерсени гана калтыргыңыз келет. --output параметри бул жерде жардам берет (-o)

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

Ack grepге караганда жакшыраак

Кошумчалай кетсек, кашаанын жардамы менен биз табылган бөлүктү тандап, ага $[топтун номери] өзгөрмөсү аркылуу чыга алабыз. Мисалы,

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

Ack grepге караганда жакшыраак

Ack пайдалуу параметрлери бар --аралыгы-старт и --аралыгы-аягы. Качан жардам беришет
Маалыматтар бир сапта эмес, көп сап түрүндө сакталат.

Мисалы, sql коду бар файл бар

Ack grepге караганда жакшыраак

Келгиле, мамычалардын аттарын чыгарып алалы. Блоктун башталышы SELECT менен башталган сап болот, ал эми аягы FROM менен башталган сап болот.

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

Ack grepге караганда жакшыраак

Эгерде издөө туюнтмасы чекит, кашаа жана башкалар сыяктуу атайын символдорду камтыса, анда алардан качып калбоо үчүн , параметрди колдонсоңуз болот. -Q.

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

Ack grepге караганда жакшыраак

Файлдар менен иштөө

Белгилүү кеңейтүүсү бар файлдардын тизмесин алыңыз

ack -f --js

Ack grepге караганда жакшыраак

Опцияны колдонуп аты P* менен башталган бардык js файлдарын табыңыз (-g).

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

Ack grepге караганда жакшыраак

тарам

Утилитанын өзүнүн конфигурация файлы бар. Сиз колдонуучу үчүн глобалдык конфигурацияга (~/.ackrc) жана белгилүү бир папка үчүн жергиликтүү конфигурацияга ээ боло аласыз (сиз папкада .ackrc файлын түзүшүңүз керек).

Конфигурацияларда жазылган варианттардын көбүн чакырганда кол менен көрсөтүүгө болот. Келгиле, алардын бир нечесин карап көрөлү.

Издөө учурунда папканы этибарга албаңыз

--ignore-dir=dist

Ыңгайлаштырылган файл түрүн -vue кошолу.

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

Эми файлдарды издөө үчүн --vue опциясын колдоно аласыз .vue. Мисалы: ack --vue App.
Бул параметр үчүн кеңейтүүлөрдүн тизмесин көрсөтсөңүз болот. Мисалы, бул жерде, -vue колдонууда, төмөнкүлөр иштетилет:
.js файлдары.

Файлдарды этибарга албаңыз, мисалы кичирейтилген *.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 hello | дүйнө) сиз файл тутумунда жана файлдардын өзүндө маалыматтарды издөө жана чыпкалоо үчүн күчтүү комбинацияны түзө аласыз.

Source: www.habr.com

Комментарий кошуу