Nel nostro primo articolo sul comando grep, abbiamo trattato alcune funzionalità offerte dallo strumento, incluso il modo in cui puoi utilizzarlo per cercare solo parole, cercare due parole, contare le righe contenenti parole corrispondenti e altro ancora. Oltre a questi, lo strumento fornisce alcune funzionalità più utili e di facile comprensione. In questo articolo ne discuteremo alcuni.
Tieni presente che tutti gli esempi menzionati in questo tutorial sono stati testati su Ubuntu 14.04LTS. Inoltre, utilizzeremo il seguente file (test_file1.txt) per tutti i nostri esempi relativi a grep in questo tutorial:
Ricerca senza distinzione tra maiuscole e minuscole con Grep
Per impostazione predefinita, grep distingue tra maiuscole e minuscole, il che significa, ad esempio, tratterà "ABC" e "abc" separatamente. Tuttavia, se desideri che la tua ricerca non faccia distinzione tra maiuscole e minuscole, puoi utilizzare -i opzione della riga di comando.
grep -i [string-to-be-searched] [filename]
Ad esempio:
grep -i "linux" test_file1.txt
Nota :Non solo pattern (ad esempio, 'linux' nell'esempio sopra), la pagina man di grep dice che l'opzione -i assicura anche che la distinzione tra maiuscole e minuscole per i file di input venga ignorata. Ecco l'estratto:
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)
Tuttavia, non siamo stati in grado di riprodurre il comportamento relativo ai file di input da parte nostra.
Visualizza alcune righe non corrispondenti con una riga contenente una stringa corrispondente in Grep
Utilizzando lo strumento, puoi anche visualizzare un numero specificato di righe dopo, prima o intorno alla riga contenente la stringa corrispondente.
Usa la -A opzione della riga di comando per stampare 'N' righe dopo la riga corrispondente.
$ grep -A N [string-to-be-searched] [filename]
Ad esempio:
$ grep -A 2 "linux" test_file1.txt
Ecco l'output del comando precedente
Allo stesso modo, l'opzione della riga di comando -B viene utilizzata per visualizzare le righe prima della riga corrispondente.
$ grep -B N [string-to-be-searched] [filename]
Ad esempio:
$ grep -B 2 "linux" test_file1.txt
Ecco l'output:
Infine, per stampare le righe attorno alla riga corrispondente, usa l'opzione della riga di comando -C.
$ grep -C N [string-to-be-searched] [filename]
Ad esempio:
$ grep -C 2 "linux" test_file1.txt
Ecco l'output catturato:
Stampa solo stringhe corrispondenti in Grep
È inoltre consentito stampare solo la stringa corrispondente sull'output standard (invece delle righe complete che vengono visualizzate per impostazione predefinita). È possibile accedere a questa funzione utilizzando l'opzione della riga di comando -o.
$ grep -o [string-to-be-searched] [filename]
Ad esempio, se il requisito è cercare una stringa "linux" in un file (ma le righe complete non devono essere stampate), utilizzeremo il comando seguente.
$ grep -o "linux" [file-name]
Possiamo anche usare caratteri jolly come * e .* per grep più di una stringa. Ad esempio, se vogliamo grep un gruppo di parole che iniziano da "come" e terminano con "linux", allora possiamo usare il comando seguente.
$ grep -o “how.*linux” [file-name]
Mostra la posizione in Grep
Il comando grep consente inoltre di visualizzare l'offset di byte della riga in cui si trova la stringa corrispondente. È possibile accedere a questa funzione utilizzando l'opzione della riga di comando -b. Ma per un migliore utilizzo di questa opzione, puoi usarla con l'opzione della riga di comando -o, che visualizzerà la posizione esatta della stringa corrispondente.
$ grep -o -b [string-to-be-searched] [filename]
Ad esempio:
$ grep -o -b "for" test_file1.txt
Ecco l'output:
Conclusione
Potresti non richiedere tutte queste opzioni ogni giorno, ma dovresti almeno conoscerle perché non sai mai quando potrebbero tornare utili. Grep diventa ancora più potente se usato con l'espressione regolare, ma lasceremo quell'argomento per un altro giorno.