Ricerca nel sito web

Come utilizzare il comando Grep in Linux [12 esempi utili]


Ti è mai capitato di dover cercare una stringa o un pattern particolare in un file, ma non avere idea da dove iniziare a cercare? Ebbene, ecco il comando grep in soccorso!

grep è un potente ricercatore di modelli di file fornito in dotazione su ogni distribuzione di Linux. Se per qualsiasi motivo non è installato sul tuo sistema, puoi installarlo facilmente tramite il gestore pacchetti come mostrato.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

Ho scoperto che il modo più semplice per iniziare a usare il comando grep è semplicemente immergersi e utilizzare alcuni esempi del mondo reale.

1. Cerca e trova file in Linux

Diciamo che hai appena installato una nuova copia del nuovo Ubuntu sul tuo computer e che intendi provare lo scripting Python.

Hai esplorato il Web alla ricerca di tutorial, ma vedi che ci sono due diverse versioni di Python in uso e non sai quale versione di Python è installata su Ubuntu dal programma di installazione, oppure se ha installato qualche modulo.

Basta eseguire il seguente comando dpkg con grep come mostrato:

dpkg -l | grep -i python

Per prima cosa abbiamo eseguito dpkg –l, che elenca i pacchetti *.deb installati sul tuo sistema. In secondo luogo, abbiamo reindirizzato l'output a grep -i python, che dice semplicemente "vai a grep, filtra e restituisci tutto ciò che contiene 'python'. "

L'opzione -i serve per ignorare maiuscole e minuscole, poiché grep fa distinzione tra maiuscole e minuscole. Usare l'opzione -i è una buona abitudine a meno che, ovviamente, tu non stia cercando di definire una ricerca più specifica.

2. Cerca e filtra i file in Linux

Il grep può essere utilizzato anche per cercare e filtrare all'interno di singoli file o di più file. Prendiamo questo scenario:

Stai riscontrando qualche problema con il tuo server Web Apache e hai contattato uno dei tanti fantastici forum in rete per chiedere aiuto.

L'anima gentile che ti risponde ti ha chiesto di pubblicare il contenuto del tuo file /etc/apache2/apache2.conf. Non sarebbe più facile per te, per il ragazzo che ti aiuta e per tutti coloro che lo leggono se potessi rimuovere tutte le righe commentate? Bene, puoi! Esegui semplicemente questo:

grep -v ^\# /etc/apache2/apache2.conf | grep .

L'opzione -v dice a grep di invertire il suo output, il che significa che invece di stampare le righe corrispondenti, fai il contrario e stampa tutte le righe che non corrispondono all'espressione, in questo caso, le righe commentate #.

Nota che abbiamo usato anche grep . alla fine per nascondere l'output di tutte le righe vuote. In questo modo vediamo solo le impostazioni di configurazione nel nostro terminale.

3. Trova tutti i file .mp3 in Linux

Il grep può essere molto utile per filtrare da stdout. Ad esempio, supponiamo che tu abbia un'intera cartella piena di file musicali in una serie di formati diversi.

Vuoi trovare tutti i file *.mp3 dell'artista JayZ, ma non vuoi nessuna delle tracce remixate. Usare un comando find con un paio di pipe grep basterà:

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

In questo esempio, stiamo utilizzando find per stampare tutti i file con estensione *.mp3, reindirizzandoli a grep –i per filtrare out e stampa tutti i file con il nome “JayZ ” e poi un altro pipe a grep –vi che filtra e non stampa tutti i nomi di file con la stringa (in ogni caso) “remix”.

4. Visualizza il numero di righe prima o dopo la stringa di ricerca

Un'altra coppia di opzioni sono gli interruttori -A e -B, che visualizzano la riga corrispondente e un numero di righe che precedono o seguono la stringa di ricerca.

Sebbene la pagina man fornisca una spiegazione più dettagliata, trovo più semplice ricordare le opzioni come -A=dopo e -B=prima:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Stampa il numero di righe attorno alla corrispondenza

L'opzione -C di grep è simile, ma invece di stampare le righe che precedono o seguono la stringa, stampa le righe in entrambe le direzioni:

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Contare il numero di corrispondenze

Simile al reindirizzamento di una stringa grep al conteggio delle parole (comando wc), l'opzione integrata di grep può eseguire lo stesso per te:

ifconfig | grep -c inet6

7. Cerca file in base alla stringa specificata in Linux

L'opzione –n per grep è molto utile durante il debug dei file durante errori di compilazione. Visualizza il numero di riga nel file della stringa di ricerca specificata:

grep -n "main" setup.py

8. Cerca una stringa ricorsivamente in tutte le directory

Se desideri cercare una stringa nella directory corrente insieme a tutte le sottodirectory, puoi specificare l'opzione –r per eseguire la ricerca ricorsivamente:

grep -r “function” *

9. Cerca l'intero modello

Passando l'opzione -w a grep si cerca l'intero pattern presente nella stringa. Ad esempio, utilizzando:

ifconfig | grep -w "RUNNING"

Stamperà la riga contenente il modello tra virgolette. D'altra parte, se provi:

ifconfig | grep -w "RUN"

Non verrà restituito nulla poiché non stiamo cercando uno schema, ma una parola intera.

10. Cerca una stringa in File Gzipped

Meritano una menzione i derivati di grep. Il primo è zgrep, che, simile a zcat, deve essere utilizzato su file gzippati. Richiede le stesse opzioni di grep e viene utilizzato allo stesso modo:

zgrep -i error /var/log/syslog.2.gz

11. Abbina le espressioni regolari nei file

Il comando egrep è un altro derivato che sta per "Extended Global Regular Expression". Riconosce metacaratteri aggiuntivi dell'espressione come at + ? | e ().

Il comando egrep è molto utile per cercare file sorgente e altri pezzi di codice, in caso di necessità. Può essere invocato dal normale grep specificando l'opzione -E.

grep -E

12. Cerca una stringa di pattern fisso

Il comando fgrep cerca in un file o in un elenco di file una stringa di modello fissa. È uguale a grep -F. Un modo comune di utilizzare fgrep è passargli un file di pattern:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Questo è solo un punto di partenza con grep, ma come probabilmente avrai potuto vedere, è inestimabile per una varietà di scopi. A parte i semplici comandi a riga singola che abbiamo implementato, grep può essere utilizzato per scrivere potenti lavori cron e robusti script shell, per un inizio.

Sii creativo, sperimenta le opzioni sulla pagina man e crea espressioni grep che servano ai tuoi scopi!