Cerca quali file includono il testo/stringa specificati in Linux (esempi)
Questo tutorial mostra come cercare e stampare quali file contengono il testo o la stringa specificati in Ubuntu e altri Linux nella riga di comando, con esempi.
La ricerca di file o contenuto di file è un'abilità importante per l'amministratore Linux. Ho mostrato come utilizzare il comando localizza per cercare file tramite la parola chiave nel nome file, nel percorso e nel tipo di file.
Qui ti mostrerò come cercare i file se conosci il testo o la stringa che contengono.
Metodo 1: utilizzare il comando grep
grep è uno strumento da riga di comando molto popolare che la maggior parte di Linux lo include immediatamente. Lo uso abbastanza spesso per filtrare il contenuto nell'output del comando.
Nel mio caso, la creazione di un'app a volte funziona con Ubuntu recente ma NON con Ubuntu precedente. Restituisce l'errore "non ha alcun membro o classe denominata 'xxxxxx'". Devo scoprire quale file contiene quel membro/classe nella recente Ubuntu e eseguire il backport alla versione precedente di Ubuntu.
1. Nel caso, posso eseguire il comando seguente, ad esempio, per cercare i file nella directory /usr/include che includono la stringa GParamSpecClass nel contenuto del file.
grep -lr "GParamSpecClass" /usr/include/Qui puoi sostituire la stringa e la directory di ricerca di conseguenza oppure saltare /usr/include/ per cercare nella directory di lavoro corrente.
Inoltre, le opzioni del comando sono:
-lo--files-with-matchessignifica stampare solo i nomi dei file contenenti corrispondenze.-ro--recursive, cerca anche le sottocartelle per una determinata directory.
Come sai, Linux fa distinzione tra maiuscole e minuscole. Per ignorare, usa -i o --ignore-case nel comando. Quindi, i comandi seguenti funzionano come l'ultimo:
grep -lir "gparamspecclass" /usr/include/grep -lir "GPARAMSPECclass" /usr/include/2. Per scelta, puoi stampare nomi di file, righe corrispondenti e numeri di riga di file che contengono "GParamSpecClass" in /usr/include/, eseguendo un comando simile di seguito:
grep -irn "GParamSpecClass" /usr/include/Come vedi, al comando:
- Salta
-lo--files-with-matches, quindi stamperà le righe corrispondenti nell'output. - Aggiungi
-no--line-number, mostrerà anche i numeri di riga.
3. Per mostrare più contenuti del file, puoi aggiungere:
-A NUMo--after-context=NUMper stampare NUM righe di contesto finale dopo la corrispondenza delle righe.-B NUMo--before-context=NUMper stampare NUM righe del contesto iniziale prima di abbinare le righe
Ad esempio, cerca i file nella directory /usr/include che includono la stringa "g_cclosure_marshal_generic", stampa i nomi dei file, le righe corrispondenti, nonché 2 righe prima e 4 righe dopo le corrispondenze .
grep -irn -B 2 -A 4 "g_cclosure_marshal_generic" /usr/include/A volte, potrebbero esserci più file o più righe che corrispondono a ciò che cerchi. In questo caso, puoi aggiungere -m NUM o --max-count=NUM per cercare le prime NUM corrispondenze.
Ad esempio, il comando seguente farà lo stesso dell'ultimo, ma mostrerà solo il primo corrispondente.
grep -irn -m 1 -B 2 -A 4 "g_cclosure_marshal_generic" /usr/include/grep supporta le espressioni regex per rendere la ricerca più flessibile. Invece di digitare la stringa o il testo esatto che desideri cercare, puoi utilizzare “^string” per cercare file che contengono string all'inizio delle righe, utilizzare “string $” per cercare file che contengono la stringa alla fine delle righe, oppure stringA|stringB per cercare file che contengono stringA o stringB .
Ci sono così tanti modelli regex che non posso includerli tutti in questo tutorial, vedi la pagina di Wikipedia per ulteriori informazioni.
Metodo 2: utilizzare il comando ag
È difficile per me ricordare le opzioni di comando usate raramente. In questo caso, tendo a utilizzare alternative che funzionano solo con argomenti predefiniti. ag è quello per la ricerca del contenuto del file.
1. Innanzitutto, esegui il comando per installare ag.
Per Debian, Ubuntu, Linux Mint, usa il comando:
sudo apt install silversearcher-agPer Fedora, RHEL, ecc., esegui il comando:
sudo dnf install the_silver_searcher-
Mentre, i sistemi basati su Arch possono invece utilizzare il comando seguente:
sudo pacman -S the_silver_searcher
2. Quindi, ad esempio, cerca i file in /usr/include che includono la stringa "gparamspecclass":
ag "gparamspecclass" /usr/includeCome mostra lo screenshot, stampa tutti i nomi di file, righe e numeri di riga corrispondenti. E non fa distinzione tra maiuscole e minuscole.
Il comando ag è super veloce! Nel caso in cui le opzioni predefinite non soddisfino le tue esigenze, eccone alcune simili a grep:
-A NUMo--dopo NUM, stampa NUM righe dopo le corrispondenze.-B NUMo--prima di NUM, stampa NUM righe prima delle corrispondenze.-co--count, stampa solo i nomi dei file e il numero di corrispondenze.-m NUMo--max-count NUM, stampa solo le prime NUM corrispondenze.-fo--follow, cerca anche i file collegati ad altri fuori dalla directory di ricerca.-lo--files-with-matches, stampa solo i nomi dei file che contengono corrispondenze.
Ad esempio, cerca "gparamspecclass" nella directory corrente e mostra solo i nomi dei file e il numero di corrispondenze.
ag "gparamspecclass" -cOppure cerca e stampa la prima corrispondenza, nonché 2 righe prima e 4 righe dopo le righe di corrispondenza.
ag -m 1 -A 4 -B 2 "gparamspecclass"ag esclude per impostazione predefinita i file elencati in .gitignore e .hgignore nella directory di ricerca e l'utente può aggiungere manualmente le esclusioni creandole e aggiungendole nel file .ignore.
Per cercare anche i file menzionati prima, usa l'opzione -a per cercare tutti (escludere i file nascosti) o --hidden per cercare i file nascosti. Per ulteriori informazioni, vedere man ag.





