Ack è meglio di grep

Voglio parlarti di un'utilità per la ricerca che semplifica notevolmente la vita. Quando accedo a un server e devo cercare qualcosa, controllo innanzitutto se è installato ack. Questa utilità è un'ottima alternativa a grep, e in qualche modo anche a find e wc. Perché non grep? Ack ha impostazioni più piacevoli di default, opzioni più leggibili, regex perl e un sistema di configurazione. Se ti piace (o devi) cercare tramite terminale, dovresti sicuramente provarlo.

Funzionalità di base

Ack è ricorsivo di default, e scrivere meno opzioni è sempre una buona cosa.

Possiamo utilizzare il flag -w, per dire all'utilità di cercare un'istanza del nostro modello circondata da confini di parole (spazi bianchi, barra, ecc.).

ack -w mysql

Ack è meglio di grep

Ack supporta la ricerca per tipo di file. Ad esempio, troviamo la versione del modulo nei file json.

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

Ack è meglio di grep

Puoi vedere l'elenco completo dei tipi di file supportati usando:

ack --help-types

Spesso è necessario contare quante volte una frase appare in un file di log, ad esempio per capire quanto dati ha elaborato uno script.

Ack è meglio di grep
Contiamo quante volte process appare nel file test.log, ignorando il case ("-i).

Possiamo contare le occorrenze non solo in un singolo file, ma in un gruppo. Miglioriamo la ricerca precedente della parola mysql: contiamo il numero di occorrenze della parola (-c) nei file *.js (—js), escludendo i file in cui non è stata trovata alcuna corrispondenza (-h) e sommando il totale.

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

Ack è meglio di grep

Inoltre, possiamo ottenere un report dettagliato sul numero di occorrenze in ogni file utilizzando (-l)

ack --js -w -cl mysql

Ack è meglio di grep

Se hai bisogno di ulteriore contesto per la ricerca, puoi chiedere a ack
di mostrare le righe precedenti (-B) e successive (-A) all'espressione trovata. Per farlo, devi specificare, dopo l'opzione, il numero di righe che desideri visualizzare.

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

Ack è meglio di grep

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

Ack è meglio di grep

E se hai bisogno di entrambe le cose, usa (-C)

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

Esiste anche l'opzione (-v) per invertire la ricerca, ovvero mostrare le righe in cui non c'è un determinato modello.

Espressione regolare

Ack, a differenza di grep, utilizza espressioni compatibili con Perl.
Per me questo è un grande vantaggio, non devo ricordare una sintassi separata per le regex.

ack 'vars+adds+'

Ack è meglio di grep

Esempio più complesso

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

Ack è meglio di grep

Spesso si desidera lasciare nei risultati solo ciò che corrisponde al modello. Qui aiuta l'opzione —output (-o)

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

Ack è meglio di grep

Inoltre, utilizzando le parentesi tonde possiamo evidenziare la parte trovata e riferirci ad essa nell'output tramite la variabile $[numero del gruppo]. Ad esempio,

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

Ack è meglio di grep

Ack ha opzioni utili —range-start e —range-end. Queste sono utili quando
i dati non sono memorizzati su una singola riga, ma in formato multilinea.

Ad esempio, c'è un file con codice sql

Ack è meglio di grep

Estraiamo i nomi delle colonne. L'inizio del blocco sarà una riga che inizia con SELECT, mentre la fine sarà una riga che inizia con FROM.

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

Ack è meglio di grep

Se nell'espressione di ricerca sono presenti simboli speciali come il punto, la parentesi tonde e altri, per non doverli escludere con \, è possibile utilizzare l'opzione -Q.

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

Ack è meglio di grep

Lavorare con i file

Ottenere un elenco di file con un'estensione specifica

ack -f --js

Ack è meglio di grep

Trovare tutti i file js il cui nome inizia con P*, utilizzando l'opzione (-g).

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

Ack è meglio di grep

Configurazione

L'utilità ha un file di configurazione. Si può avere sia una configurazione globale per l'utente (~/.ackrc) che una locale per una specifica cartella (nella cartella è necessario creare un file .ackrc).

La maggior parte delle opzioni che si possono impostare nei file di configurazione possono essere anche scritte manualmente durante la chiamata. Analizziamo alcune di esse.

Ignorare la cartella durante la ricerca

--ignore-dir=dist

Aggiungiamo un tipo di file personalizzato —vue.

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

Ora puoi utilizzare l'opzione —vue per cercare nei file .vue. Ad esempio: ack —vue App.
In questo modo puoi specificare un elenco di estensioni per quest'opzione. Ad esempio, qui usando —vue verranno elaborati anche
.js file.

Игнорировать файлы, например, минифицированные *.min.js

--ignore-file=match:/.min.js$/

Installazione

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

Installazione dal sito

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

Plugin per editor:

Conclusione

Queste non sono affatto tutte le funzionalità. Puoi vedere l'elenco completo delle funzioni eseguendo:

ack –-help
# o
ack --man

L'utilità ack rende la ricerca nel terminale più comoda e flessibile. E con la pipeline (ack -C 10 hello | ack world) puoi creare un potente strumento per cercare e filtrare dati nel file system e all'interno dei file.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster