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 stöder sökning efter filtyp. Låt oss till exempel hitta modulversionen i json-filer.
ack --json '"version":s+"d+.d+.d+"'
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.
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
Dessutom kan vi få en detaljerad rapport om antalet förekomster i varje fil med hjälp av (-l)
ack --js -w -cl mysql
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Mer komplext exempel
ack '*s+[vd+.d+.d+]'
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+]'
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 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
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
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.
Arbeta med filer
Få en lista över filer med ett specifikt tillägg
ack -f --js
Hitta alla js-filer vars namn börjar med P* med alternativet (-g).
ack -g --js '/Pa.+.js$'
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