Ack er bedre end grep

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 er bedre end grep

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+"'

Ack er bedre end grep

Du kan se den fulde liste over understøttede filtyper ved hjælp af:

ack --help-types

Ofte 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.

Ack er bedre end grep
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

Ack er bedre end grep

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

Ack er bedre end grep

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/

Ack er bedre end grep

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

Ack er bedre end grep

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+'

Ack er bedre end grep

Et mere komplekst eksempel

ack '*s+[vd+.d+.d+]'

Ack er bedre end grep

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+]'

Ack er bedre end grep

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 er bedre end grep

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

Ack er bedre end grep

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

Ack er bedre end grep

Hvis der er specialtegn som punktum, parentes osv. i søgestrengen, kan du bruge indstillingen -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack er bedre end grep

Arbejde med filer

Få en liste over filer med en bestemt filendelse

ack -f --js

Ack er bedre end grep

Find alle js-filer, hvis navn starter med P*, ved at bruge indstillingen (-g).

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

Ack er bedre end grep

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=dist

Lad os tilføje en brugerdefineret filtype — vue.

--type-add=vue:ext:js,vue

Nu 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 -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install ack

Installation fra hjemmesiden

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Plugins 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 --man

Væ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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster