Voglio parlarti di un'utilità di ricerca che semplifica notevolmente la vita. Quando arrivo al server e ho bisogno di cercare qualcosa, la prima cosa che faccio è controllare se ack è installato. Questa utility è un eccellente sostituto di grep, nonché di find e wc in una certa misura. Perché non grep? Ack ha impostazioni più belle e pronte all'uso, opzioni più leggibili dall'uomo, perl regex e un sistema di configurazione. Se ti piace (devi) cercare attraverso il terminale, allora dovresti assolutamente provarlo.
Caratteristiche di base
Ack è ricorsivo per impostazione predefinita e scrivere meno opzioni è sempre una buona idea.
Possiamo usare una bandiera -wper dire all'utilità di cercare un'istanza del nostro modello circondata da confini di parole (spazi bianchi, barre, ecc.).
ack -w mysql
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+"'
È possibile visualizzare un elenco completo dei tipi di file supportati utilizzando:
ack --help-types
Spesso è necessario contare quante volte una frase appare in un file di registro, ad esempio, per capire quanti dati ha elaborato lo script.
Contiamo quante volte il processo si verifica nel file test.log, senza tenere conto del caso (-i).
Possiamo contare le occorrenze non solo in un file specifico, ma in un gruppo. Concludiamo la ricerca precedente per la parola mysql: contiamo il numero di occorrenze delle parole (-Con) nei file *.js(--js), esclusi i file in cui non è stato trovato nulla (-h) e riassumendo il risultato.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Inoltre, possiamo ottenere un rapporto dettagliato sul numero di occorrenze in ciascun file utilizzando (-l)
ack --js -w -cl mysql
Se hai bisogno di ulteriore contesto per la tua ricerca, puoi chiedere ack
mostra le righe fino a (-B) e dopo (-A) dell'espressione trovata. Per fare ciò, è necessario specificare dopo l'opzione il numero di righe che devono essere mostrate.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
E se hai bisogno di entrambi, usa (-INSIEME A)
ack --js --column -C 2 "query.once('" ./lib/
C'è anche un'opzione (-v) per invertire la ricerca, ovvero mostrare le righe che non contengono un determinato pattern.
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 espressioni regolari.
ack 'vars+adds+'
Esempio più complesso
ack '*s+[vd+.d+.d+]'
Spesso si desidera lasciare nei risultati solo ciò che corrisponde al modello. L'opzione --output aiuterà qui (-o)
ack -o '*s+[vd+.d+.d+]'
Inoltre, utilizzando le parentesi possiamo selezionare la parte trovata e accedervi in output tramite la variabile $[numero gruppo]. Per esempio,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack ha opzioni utili --intervallo-inizio и --fine-intervallo. Aiutano quando
I dati non vengono memorizzati su una riga, ma su più righe.
Ad esempio, c'è un file con codice SQL
Estraiamo i nomi delle colonne. L'inizio del blocco sarà una linea che inizia con SELECT e la fine sarà una linea che inizia con FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Se l'espressione di ricerca contiene caratteri speciali come un punto, una parentesi e altri, per non evitarne l'escape utilizzando , puoi utilizzare l'opzione -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Lavorare con i file
Ottieni un elenco di file con un'estensione specifica
ack -f --js
Trova tutti i file js il cui nome inizia con P* utilizzando l'opzione (-g).
ack -g --js '/Pa.+.js$'
Configurazione
L'utilità ha il proprio file di configurazione. Puoi avere sia una configurazione globale per l'utente (~/.ackrc) che una locale per una cartella specifica (devi creare un file .ackrc nella cartella).
La maggior parte delle opzioni scritte nelle configurazioni possono essere specificate manualmente quando vengono richiamate. Diamo un'occhiata ad alcuni di loro.
Ignora 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 i file .vista. Per esempio: ack --vue App.
È possibile specificare un elenco di estensioni per questa opzione. Ad esempio, qui, quando si utilizza -vue, verrà elaborato quanto segue: file .js.
Ignora i file, ad esempio minimizzati *.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 gli editor:
conclusione
Queste non sono tutte le possibilità. L'elenco completo delle funzioni può essere visualizzato eseguendo:
ack –-help
# или
ack --man
L'utilità ack consente di rendere la ricerca nel terminale più comoda e flessibile. E utilizzando la pipeline (ack -C 10 ciao | ack mondo) è possibile creare una potente combinazione per la ricerca e il filtraggio dei dati nel file system e nei file stessi.
Fonte: habr.com