Ак е подобар од греп

Сакам да ви кажам за една алатка за пребарување која во голема мера го поедноставува животот. Кога ќе стигнам до серверот и треба да барам нешто, првото нешто што го правам е да проверам дали е инсталиран 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

Додадете коментар