Jeg vil fortælle om et værktøj til søgning, som gør livet meget lettere. Når jeg kommer ind på en server og har brug for at søge efter noget, tjekker jeg først, om ack er installeret. Dette værktøj er en fremragende erstatning for grep, og på en måde også for find og wc. Hvorfor ikke grep? Ack har mere brugervenlige indstillinger fra starten, mere læsevenlige muligheder, Perl-regulære udtryk og et konfigurationssystem. Hvis du elsker (eller må) søge gennem terminalen, så bør du bestemt prøve det.
Grundlæggende funktioner
Ack er som standard rekursiv, og det er altid godt at skrive færre muligheder.
Vi kan bruge flaget -w, for at fortælle værktøjet at søge efter tilfælde af vores skabelon, omgivet af ordgrænser (mellemrum, skråstreg osv.).
ack -w mysql
Ack understøtter søgning baseret på filtype. For eksempel, lad os finde versionen af modulet i json-filer.
ack --json '"version":s+"d+.d+.d+"'
Du kan se den fulde liste over understøttede filtyper ved hjælp af:
ack --help-typesOfte skal vi tælle, hvor mange gange en sætning optræder i en logfil, for eksempel for at forstå, hvor mange data scriptet har behandlet.
![]()
Lad os tælle, hvor mange gange process optræder i filen test.log, uden at tage hensyn til store og små bogstaver (-i).
Vi kan tælle forekomster ikke kun i én specifik fil, men i en gruppe. Lad os forbedre den foregående søgning af ordet mysql: lad os tælle antallet af forekomster af ord (-c) i *.js-filer (—js), og ekskludere filer, hvor der ikke er fundet noget (-h) og summere resultatet.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Derudover kan vi få en udførlig rapport over antallet af forekomster i hver fil ved hjælp af (-l)
ack --js -w -cl mysql
Hvis du har brug for ekstra kontekst til søgningen, kan du bede ack
om at vise linjer før (-B) og efter (-A) det fundne udtryk. For dette skal du angive antallet af linjer, du ønsker at vise, efter indstillingen.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Og hvis du har brug for begge dele, så brug (-C)
ack --js --column -C 2 "query.once('" . /lib/Der er også en mulighed (-v) for at invertere søgningen, så den viser linjer uden det angivne mønster.
Regulære udtryk
Ack bruger, i modsætning til grep, Perl-kompatible udtryk.
For mig er det en stor fordel, jeg behøver ikke at huske en separat syntaks for regulære udtryk.
ack 'vars+adds+'
Et mere komplekst eksempel
ack '*s+[vd+.d+.d+]'
Ofte ønsker man kun at beholde det, der matcher mønsteret i resultaterne. Her kan indstillingen —output hjælpe (-o)
ack -o '*s+[vd+.d+.d+]'
Desuden kan vi ved hjælp af parenteser fremhæve den fundne del og referere til den i output via variablen $[gruppe nummer]. For eksempel,
ack --output='version er $1' '*s+[v(d+.d+.d+)]'
Ack har nyttige indstillinger —range-start og —range-end. De hjælper, når
data ikke er gemt på én linje, men i flerlags format.
For eksempel er der en fil med sql kode

Lad os udtrække kolonneoverskrifterne. Blokkens start vil være en linje, der begynder med SELECT, og slutningen vil være en linje, der begynder med FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Hvis der er specialtegn som punktum, parentes osv. i søgestrengen, kan du bruge indstillingen -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Arbejde med filer
Få en liste over filer med en bestemt filendelse
ack -f --js
Find alle js-filer, hvis navn starter med P*, ved at bruge indstillingen (-g).
ack -g --js '/Pa.+.js$'
Konfiguration
Værktøjet har sin egen konfigurationsfil. Man kan have både en global konfig for brugeren (~/.ackrc) og en lokal for en bestemt mappe (der skal oprettes en fil .ackrc i mappen).
De fleste indstillinger, der er angivet i konfigurationerne, kan også angives manuelt ved opkald. Lad os kigge på nogle af dem.
Ignorer mappen under søgning
--ignore-dir=distLad os tilføje en brugerdefineret filtype — vue.
--type-add=vue:ext:js,vueNu kan vi bruge indstillingen —vue til at søge i filer .vue. For eksempel: ack —vue App.
Her kan du angive en liste over filendelser for denne indstilling. For eksempel, ved brug af —vue vil også .js-filer blive behandlet.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:/.min.js$/Installation
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackInstallation fra hjemmesiden
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackPlugins til redaktører:
Konklusion
Det er langt fra alle muligheder. Den fulde liste over funktioner kan ses ved at udføre:
ack –-help
# eller
ack --manVærktøjet ack gør det lettere og mere fleksibelt at søge i terminalen. Og ved hjælp af pipeline (ack -C 10 hello | ack world) kan du skabe en kraftfuld kombination til søgning og filtrering af data i filsystemet og i selve filerne.
Kilde: habr.com
