Ack è meglio di grep

Voglio parlare di un'utilità per la ricerca che semplifica notevolmente la vita. Quando accedo a un server e ho bisogno di cercare qualcosa, la prima cosa che faccio è controllare se ack è installato. Questa utilità è una sostituzione eccellente di grep, e in un certo senso anche di find e wc. Perché non usare grep? Ack ha impostazioni più piacevoli out-of-the-box, opzioni più leggibili, espressioni regolari Perl e un sistema di configurazione. Se ti piace (o sei costretto a) cercare tramite terminale, dovresti assolutamente provarlo.

Funzionalità di base

Ack è ricorsivo per impostazione predefinita, e scrivere meno opzioni è sempre una cosa buona.

Possiamo usare il flag -w, per dire all'utilità di cercare un'istanza del nostro modello, circondata dai confini delle parole (spazi, slash, 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 visualizzare 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 quanti dati ha elaborato uno script.

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

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

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

Ack è meglio di grep

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

ack --js -w -cl mysql

Ack è meglio di grep

Se hai bisogno di un contesto aggiuntivo per la ricerca, puoi chiedere a ack
di mostrare le righe prima (-B) e dopo (-A) l'espressione trovata. Per fare ciò, devi specificare dopo l'opzione il numero di righe da mostrare.

# 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 entrambi, usa (-C)

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

C'è anche l'opzione (-v) per invertire la ricerca, cioè mostrare le righe in cui non è presente il modello specificato.

Espressioni regolari

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

ack 'vars+adds+'

Ack è meglio di grep

Esempio più complesso

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

Ack è meglio di grep

Spesso vogliamo 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 offre opzioni utili —range-start e —range-end. Aiutano quando
i dati non sono memorizzati in una sola riga, ma in formato multiriga.

Ad esempio, c'è un file con codice sql

Ack è meglio di grep

Estrarremo i nomi delle colonne. L'inizio del blocco sarà una riga che inizia con SELECT, e 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 caratteri speciali come il punto, la parentesi tonde e altri, per non doverli sfuggire con , si può utilizzare l'opzione -Q.

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

Ack è meglio di grep

Gestione dei file

Ottenere un elenco di file con un'estensione specifica

ack -f --js

Ack è meglio di grep

Cerca 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. Può avere sia una configurazione globale per l'utente (~/.ackrc), sia una locale per una cartella specifica (nella cartella è necessario creare un file .ackrc).

La maggior parte delle opzioni che si scrivono nei file di configurazione possono essere anche specificate manualmente durante la chiamata. Esaminiamo alcune di esse.

Ignora la cartella durante la ricerca

--ignore-dir=dist

Aggiungiamo un tipo di file personalizzato —vue.

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

Ora possiamo utilizzare l'opzione —vue per cercare nei file .vue. Ad esempio: ack —vue App.
È possibile specificare un elenco di estensioni per questa opzione. Ad esempio, qui con l'utilizzo di —vue saranno elaborati anche
.js files.

Игнорировать файлы, например, минифицированные *.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 sono solo alcune delle funzionalità. È possibile visualizzare l'elenco completo delle funzioni eseguendo:

ack --help
# oppure
ack --man

L'utilità ack consente di rendere la ricerca nel terminale più comoda e flessibile. E grazie al pipeline (ack -C 10 hello | ack world) si può creare un potente strumento per la ricerca e la filtrazione dei dati nel filesystem e nei file stessi.

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