Ack är bättre än grep

Jag vill berätta om ett sökverktyg som avsevärt förenklar livet. När jag kommer till servern och jag behöver leta efter något är det första jag gör att kontrollera om ack är installerat. Det här verktyget är en utmärkt ersättning för grep, såväl som find och wc till viss del. Varför inte grep? Ack har snyggare inställningar ur lådan, mer läsbara alternativ, perl regex och ett konfigurationssystem. Om du gillar (måste) söka igenom terminalen bör du definitivt prova det.

Grundläggande funktioner

Ack är rekursivt som standard, och att skriva färre alternativ är alltid en bra idé.

Vi kan använda en flagga -watt tala om för verktyget att leta efter en instans av vårt mönster omgivet av ordgränser (blanksteg, snedstreck, etc.).

ack -w mysql

Ack är bättre än grep

Ack stöder sökning efter filtyp. Låt oss till exempel hitta modulversionen i json-filer.

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

Ack är bättre än grep

En komplett lista över filtyper som stöds kan ses med:

ack --help-types

Ofta behöver man räkna hur många gånger en fras förekommer i en loggfil, till exempel för att förstå hur mycket data skriptet bearbetade.

Ack är bättre än grep
Vi räknar hur många gånger processen inträffar i test.log-filen, utan hänsyn till fall (-i).

Vi kan räkna händelser inte bara i en specifik fil, utan i en grupp. Låt oss avsluta den föregående sökningen efter ordet mysql: räkna antalet förekomster av ord (-från) i *.js-filer(--js), exklusive filer där inget hittades (-h) och summerar resultatet.

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

Ack är bättre än grep

Dessutom kan vi få en detaljerad rapport om antalet förekomster i varje fil med hjälp av (-l)

ack --js -w -cl mysql

Ack är bättre än grep

Om du behöver ytterligare sammanhang för din sökning kan du fråga ack
visa linjer upp till (-B) och efter (-A) av det hittade uttrycket. För att göra detta måste du efter alternativet ange antalet rader som måste visas.

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

Ack är bättre än grep

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

Ack är bättre än grep

Och om du behöver båda, använd sedan (-MED)

ack --js --column -C 2 "query.once('" ./lib/

Det finns också ett alternativ (-v) för att invertera sökningen, dvs visa linjer som inte innehåller ett givet mönster.

Vanligt uttryck

Ack, till skillnad från grep, använder Perl-kompatibla uttryck.
För mig är detta ett stort plus; jag behöver inte komma ihåg en separat syntax för reguljära uttryck.

ack 'vars+adds+'

Ack är bättre än grep

Mer komplext exempel

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

Ack är bättre än grep

Ofta vill man bara lämna det som matchar mallen i resultatet. --output alternativet kommer att hjälpa här (-o)

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

Ack är bättre än grep

Med hjälp av parenteser kan vi dessutom välja den hittade delen och komma åt den i utdata genom variabeln $[gruppnummer]. Till exempel,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack är bättre än grep

Ack har användbara alternativ --räckvidd-start и --range-end. De hjälper när
Data lagras inte på en rad, utan i flerradsform.

Det finns till exempel en fil med sql-kod

Ack är bättre än grep

Låt oss extrahera kolumnnamnen. Början av blocket kommer att vara en rad som börjar med SELECT, och slutet kommer att vara en rad som börjar med FROM.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack är bättre än grep

Om sökuttrycket innehåller specialtecken som en punkt, en parentes och andra, kan du använda alternativet för att inte undvika dem med hjälp av . -Q.

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

Ack är bättre än grep

Arbeta med filer

Få en lista över filer med ett specifikt tillägg

ack -f --js

Ack är bättre än grep

Hitta alla js-filer vars namn börjar med P* med alternativet (-g).

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

Ack är bättre än grep

konfiguration

Verktyget har sin egen konfigurationsfil. Du kan ha både en global konfiguration för användaren (~/.ackrc) och en lokal för en specifik mapp (du måste skapa en .ackrc-fil i mappen).

De flesta av alternativen som är skrivna i konfigurationerna kan specificeras manuellt när de anropas. Låt oss titta på några av dem.

Ignorera mappen när du söker

--ignore-dir=dist

Låt oss lägga till en anpassad filtyp -vue.

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

Nu kan du använda --vue-alternativet för att söka efter filer .vue. Till exempel: ack --vue App.
Du kan ange en lista med tillägg för det här alternativet. Till exempel, här, när du använder -vue, kommer följande att bearbetas:
.js-filer.

Ignorera filer, till exempel minifierad *.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 från webbplatsen

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

Plugins för redaktörer:

Slutsats

Det här är inte alla möjligheter. Den fullständiga listan över funktioner kan ses genom att köra:

ack –-help
# или
ack --man

Med ack-verktyget kan du göra sökningen i terminalen mer bekväm och flexibel. Och använder pipeline (ack -C 10 hej | ack världen) kan du skapa en kraftfull kombination för att söka och filtrera data i filsystemet och i själva filerna.

Källa: will.com

Lägg en kommentar