Мен сизге жашоону абдан жеңилдеткен бир издөө программасы жөнүндө айткым келет. Мен серверге келгенде жана мен бир нерсе издөөм керек болгондо, биринчи жолу ack орнотулганын текшерүү. Бул утилита grep үчүн эң сонун алмаштыруучу, ошондой эле кандайдыр бир деңгээлде find жана wc. Эмне үчүн grep эмес? Ack'те жакшыраак орнотуулар, адам окуй турган көбүрөөк параметрлер, Perl regex жана конфигурациялоо системасы бар. Эгер сиз терминал аркылуу издөөнү кааласаңыз (керек болсо), анда сөзсүз түрдө аракет кылышыңыз керек.
Негизги өзгөчөлүктөрү
Ack демейки боюнча рекурсивдүү жана азыраак варианттарды жазуу дайыма жакшы идея.
Биз желек колдоно алабыз -wутилитага сөз чектери менен курчалган үлгүбүздүн үлгүсүн издөөнү айтууга (боштук, сызыктар ж.б.).
ack -w mysql
Ack файл түрү боюнча издөөнү колдойт. Мисалы, json файлдарынан модулдун версиясын табалы.
ack --json '"version":s+"d+.d+.d+"'
Колдоого алынган файл түрлөрүнүн толук тизмесин колдонуу менен көрүүгө болот:
ack --help-types
Көбүнчө скрипт канча маалымат иштеткенин түшүнүү үчүн, мисалы, журнал файлында фразанын канча жолу пайда болоорун санашыңыз керек.
Биз тест.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/
Эгер сизге экөө тең керек болсо, анда колдонуңуз (-WITH)
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+]'
Кошумчалай кетсек, кашаанын жардамы менен биз табылган бөлүктү тандап, ага $[топтун номери] өзгөрмөсү аркылуу чыга алабыз. Мисалы,
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
Опцияны колдонуп аты P* менен башталган бардык js файлдарын табыңыз (-g).
ack -g --js '/Pa.+.js$'
тарам
Утилитанын өзүнүн конфигурация файлы бар. Сиз колдонуучу үчүн глобалдык конфигурацияга (~/.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