Ack е по-добър от grep

Искам да ви разкажа за една помощна програма за търсене, която значително опростява живота. Когато стигна до сървъра и трябва да потърся нещо, първото нещо, което правя, е да проверя дали ack е инсталиран. Тази помощна програма е отличен заместител на grep, както и find и wc до известна степен. Защо не grep? Ack има по-хубави настройки от кутията, по-четими за човека опции, perl регулярен израз и система за конфигуриране. Ако обичате (трябва) да търсите през терминала, тогава определено трябва да го опитате.

Основни функции

Ack е рекурсивен по подразбиране и писането на по-малко опции винаги е добра идея.

Можем да използваме флаг -wза да кажем на помощната програма да търси екземпляр на нашия модел, заобиколен от граници на думи (бели интервали, наклонени черти и т.н.).

ack -w mysql

Ack е по-добър от grep

Ack поддържа търсене по тип файл. Например, нека намерим версията на модула в json файлове.

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

Ack е по-добър от grep

Пълен списък на поддържаните типове файлове може да се види с помощта на:

ack --help-types

Често трябва да преброите колко пъти дадена фраза се появява в регистрационен файл, например, за да разберете колко данни е обработил скриптът.

Ack е по-добър от grep
Отчитаме колко пъти се случва процес във файла test.log, без да вземаме предвид регистъра на буквите (-i).

Можем да преброим срещанията не само в един конкретен файл, но и в група. Нека финализираме предишното търсене на думата mysql: пребройте броя на срещанията на думи (-От) в *.js файлове (--js), с изключение на файлове, в които не е намерено нищо (-h) и сумиране на резултата.

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

Ack е по-добър от grep

Освен това можем да получим подробен отчет за броя на срещанията във всеки файл, използвайки (-l)

ack --js -w -cl mysql

Ack е по-добър от grep

Ако имате нужда от допълнителен контекст за вашето търсене, можете да попитате ack
покажи редове до (-B) и след (-A) на намерения израз. За да направите това, трябва да посочите след опцията броя на редовете, които трябва да бъдат показани.

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

Ack е по-добър от grep

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

Ack е по-добър от grep

И ако имате нужда от двете, използвайте (-От)

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

Намерете всички js файлове, чието име започва с P*, като използвате опцията (-g).

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

Ack е по-добър от grep

Конфигурация

Помощната програма има свой собствен конфигурационен файл. Можете да имате както глобална конфигурация за потребителя (~/.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 здравей | ack свят) можете да създадете мощна комбинация за търсене и филтриране на данни във файловата система и в самите файлове.

Източник: www.habr.com

Добавяне на нов коментар