Per impostazione predefinita, la maggior parte degli strumenti di ricerca esamina i nomi dei file, non il contenuto dei file. Tuttavia, il più famoso programma di ricerca GNU, grep
, cercherà all’interno dei file con i flag corretti. Qui ti mostreremo come trovare parole specifiche in un file su Linux.
Utilizzo di grep per trovare una parola specifica in un file
Per impostazione predefinita, grep cerca nel contenuto dei file così come nei loro nomi di file. È incluso nella maggior parte dei sistemi Linux ed è generalmente identico in tutte le distribuzioni. Detto questo, i box Linux più piccoli o meno potenti potrebbero preferire eseguire un comando diverso, come ack
.
A seconda di come il file è codificato, grep potrebbe non essere sempre in grado di guardare all’interno. Ma per la maggior parte dei formati basati su testo, grep può eseguire la scansione del testo del file per il modello specificato.
grep -Rw '/path/to/search/' -e 'pattern'
Il -R
flag imposta grep in modalità ricorsiva, navigando attraverso tutte le directory contenute nella directory specificata. Il -w
flag cerca corrispondenze di parole intere. Ciò significa che “rosso” corrisponderà solo a “rosso” circondato da spazi vuoti e non “ridondante” o “stanco”. Il -e
flag precede il pattern da cercare. Supporta le espressioni regolari per impostazione predefinita.
Per velocizzare grep, puoi usare il --exclude
e --include
flag per limitare la ricerca a determinati tipi di file. Per esempio, --exclude=*.csv
non cercherà in nessun file con estensione .csv. --include=*.txt
, d’altra parte, cercherà solo nei file con estensione .txt. Il flag può essere aggiunto immediatamente dopo il comando grep, come mostrato di seguito:
grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'
Puoi anche escludere le directory specificate seguendo il formato seguente:
grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'
Questo comando non cercherà in nessuna directory nella directory di lavoro attuale denominata dir1, dir2 o corrispondente al modello * _old, eliminandole dal processo di ricerca. Eseguirà la ricerca ricorsiva di parole complete specificata su tutti gli altri file nella directory di lavoro attuale.
Utilizzo di Trova per trovare una parola specifica in un file
Mentre il find
la sintassi del comando è più complicata di grep, alcuni la preferiscono.
find . -name "*.php" -exec grep "pattern" {} ;
Questo comando utilizzerà find’s -exec
flag per passare i file trovati a grep per la ricerca. Con una disposizione intelligente della sintassi, è possibile utilizzare la ricerca più veloce del file system di find per individuare i tipi di file specifici in cui si desidera cercare, quindi reindirizzarli a grep per cercare all’interno dei file.
Nota che find guarda solo i nomi dei file, non i contenuti. Ecco perché grep è necessario per cercare il testo e il contenuto del file. I normali flag grep dovrebbero essere pienamente operativi dall’interno di -exec
bandiera.
Utilizzo di ack per trovare una parola specifica in un file
Il comando ack è probabilmente lo strumento di ricerca più veloce, ma non è così popolare come le opzioni precedenti. Il comando seguente cercherà nella directory corrente.
ack 'pattern'
Se desideri eseguire la ricerca all’interno di un file o di una directory specifici, puoi aggiungere quel file o il percorso completo alla ricerca.
ack 'pattern' /path/to/file.txt
Conclusione
Per la maggior parte delle persone nella maggior parte delle situazioni, grep è il miglior strumento di ricerca ampiamente disponibile. Puoi anche guardare altri strumenti di ricerca, come RipGrep, per opzioni di ricerca più veloci