ripgrep è un eccellente risultato dello sforzo RIIR (riscrivilo in Rust) in corso nella comunità open source. È pensato per essere un sostituto superiore per il classico comando grep.
La sintassi per utilizzare ripgrep è la seguente:
rg <pattern> [files/directories]
Con ripgrep, non è necessario menzionare un nome file. Quando non viene fornito un nome file, viene eseguita la ricerca in tutti i file. Questo è incredibilmente utile se non sai quale file contiene il modello che cerchi.
Puoi anche usare grep per cercare in tutti i file, ma ripgrep lo fa senza alcuno sforzo aggiuntivo.
Cos'è ripgrep?
ripgrep è uno strumento di corrispondenza dei modelli regex ricorsivo che considera il tuo gitignore. Se hai file, estensioni o directory specifici nel tuo gitignore, ripgrep li ignorerà, velocizzando i tempi di esecuzione.
Alcune caratteristiche che fanno risaltare ripgrep sono le seguenti:
- Cerca i pattern in modo ricorsivo nelle directory
- Evidenziazione del colore nell'output
- Supporta un'ampia varietà di formati di codifica come UTF-8, SHIFT_JIS
- Possibilità di cercare nei file zip compressi
- Ignora i file nascosti per impostazione predefinita e utilizza il tuo file gitignore per una ricerca più rapida
Puoi pensarlo come grep, ma principalmente mirato alla ricerca di file/contenuto di file invece del flusso di byte non elaborato con cui si occupa grep.
Installa ripgrep
Sebbene grep sia preinstallato sulla maggior parte dei sistemi Linux, ripgrep non ha questo privilegio.
Tuttavia, è disponibile nei repository di tutte le principali distribuzioni Linux e puoi utilizzare il gestore di pacchetti per installarlo.
Se sei un utente di Arch Linux, sai già come installare i pacchetti :p, ma comunque, ecco il comando che dovresti usare:
pacman -S ripgrep
Gli utenti Gentoo possono installare ripgrep con il seguente comando:
emerge sys-apps/ripgrep
Se usi Fedora o Red Hat, inclina leggermente il cappello mentre digiti questo comando nel tuo terminale:
sudo dnf install ripgrep
Gli utenti di openSUSE (15.1 e versioni successive) dovrebbero utilizzare il seguente comando nel proprio terminale:
sudo zypper install ripgrep
Per gli utenti che utilizzano Debian Buster (v10) o versioni successive, utilizzare apt. Anche Ubuntu Cosmic Cuttlefish (18.10) o successivo può utilizzare i repository ufficiali della distribuzione.
sudo apt install ripgrep
Utilizzo del comando ripgrep
Se hai familiarità con l'utilizzo del comando grep, scoprirai che ripgrep funziona in modo simile. Fornisci una stringa di ricerca e un nome file, e cercherà nel file e ti mostrerà dove la stringa di input corrisponde al contenuto del file.
Per questo tutorial, ho clonato il repository del progetto dust ed eseguirò i comandi all'interno del repository clonato.
Ricerche di base
Una ricerca di esempio della descrizione della parola nel file Cargo.html:
$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\
Come previsto, lo strumento ripgrep ha cercato nel file che ho specificato e ha visualizzato i file con il testo corrispondente e il numero di riga.
Se specifichi più file da cercare (se non specifichi nessun file, cercherà tutti), ripgrep determinerà anche il nome del file il cui contenuto corrisponde.
In alternativa, puoi anche usare l'opzione '--file', che contiene il modello che vuoi abbinare. Quando cerchi regolarmente una serie di modelli da abbinare, puoi salvarli in un file e specificarli utilizzando l'opzione '--file'.
Ricerca contestuale
A volte, è bello avere un contesto della riga corrispondente, specialmente durante la ricerca in un repository di codice. L'opzione '-C' o '--context' aiuta qui. Questa opzione accetta un valore numerico e mostra le righe prima e dopo la corrispondenza.
Ci possono essere momenti in cui vuoi vedere solo poche righe sopra, inclusa la riga abbinata. A volte, vuoi solo le righe sottostanti, inclusa quella abbinata.
Puoi utilizzare l'opzione '-A', abbreviazione di '--after-context' e un valore numerico per mostrare le righe dopo ogni corrispondenza.
E per le righe prima di ogni corrispondenza, puoi utilizzare l'opzione '-B', abbreviazione di '--before-context', insieme a un valore numerico.
Colonne
Esistono diverse opzioni relative alle colonne fornite da ripgrep.
Apprezzerai il flag '--column' se sei un utente vim. Stampa la 'riga:colonna' del testo abbinato nel file.
Un'altra opzione relativa alle colonne è '-M' o '--max-columns', che accetta un valore numerico per il numero massimo di colonne. Se le colonne delle righe corrispondenti superano, ti informerà che una riga particolare è stata omessa dall'output sul terminale.
Varie
Ci sono diverse opzioni che puoi usare con ripgrep.
Puoi utilizzare l'opzione '-s' o '--case-sensitive' per abbinare il testo alla distinzione tra maiuscole e minuscole.
Se vuoi mantenere la distinzione tra maiuscole e minuscole, puoi utilizzare il flag '-i' o '--ignore-case'.
Se disponi di un'enorme base di codice, puoi utilizzare più thread per la corrispondenza dei modelli. Puoi specificare manualmente i thread usando l'opzione '-j' o '--threads'; accetta un valore numerico.
$ rg -j 4 TODO
Ci possono essere occasioni in cui desideri escludere un pattern dai risultati di ricerca. Per farlo, puoi utilizzare '-v' o '--invert-match' per escludere il pattern specificato.
ripgrep può cercare del testo in un archivio compresso (se il file compresso è un file di testo) usando il flag '-z' o '--search-zip'. Questo flag è solitamente accompagnato dal flag '-a' che tratta i file binari come file di testo.
Conclusione
ripgrep è uno strumento fantastico che puoi sfruttare, soprattutto come programmatore in un ambiente simile a UNIX.
ripgrep, anche se il nome potrebbe suggerire il contrario, non intende sostituire grep perché si comporta in modo diverso. Ma entrambi gli strumenti sono comunque utili; dipende dal tuo caso d'uso.