Сакам да ви кажам за една алатка за пребарување која во голема мера го поедноставува животот. Кога ќе стигнам до серверот и треба да барам нешто, првото нешто што го правам е да проверам дали е инсталиран 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+)]'
Ак има корисни опции -- опсег-почеток и -- опсег-крај. Тие помагаат кога
Податоците се чуваат не во една линија, туку во повеќелиниска форма.
На пример, постои датотека со 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 датотеки.
Игнорирај ги датотеките, на пример минификуван *.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 здраво | ак светот) можете да креирате моќен комбинат за пребарување и филтрирање на податоци во датотечниот систем и во самите датотеки.
Извор: www.habr.com