GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare il comando Grep per trovare testo nei file

Sistemi simili a Linux e UNIX, tutte le informazioni sulla configurazione del sistema vengono archiviate e manipolate in formato testo normale. Quindi la ricerca del testo diventerebbe un'operazione molto comune per la modifica e l'analisi dei registri.

Il comando grep consente di cercare un testo o una stringa in un file o dalla console di output di un comando, per un termine o un modello corrispondente alle espressioni regolari. Quando grep trova una corrispondenza in una riga, copia i risultati sullo schermo, ad esempio stdout.

In questo tutorial impariamo come usare il comando grep con esempi pratici.

Comando Grep

Controlliamo la sintassi del comando grep prima di iniziare a spiegarne l'utilizzo.

grep [OPTIONS] PATTERN [FILE...]

Discuteremo in dettaglio le opzioni e i modelli di grep più comuni che possiamo utilizzare per la ricerca.

Come cercare una stringa in un file

Nell'esempio seguente grep cerca nel file /etc/passwd la stringa 'root' e reindirizza l'output a stdout.

$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

Cerca testo da più file

Puoi cercare testo specifico da più file usando il seguente comando:

$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root

Ricerca Grep senza distinzione tra maiuscole e minuscole

Opzioni -i cerca la stringa/il modello specificato senza distinzione tra maiuscole e minuscole.

Negli esempi seguenti, grep trova tutte le parole come "hal", "HAL" senza distinzione tra maiuscole e minuscole:

$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

Ricerca ricorsiva

La ricerca ricorsiva si ottiene usando -r opzione che cercherà ricorsivamente tutti i collegamenti simbolici che saltano i file. Se vuoi includere link simbolici usa -R .

Nell'esempio seguente, il comando grep cercherà la stringa 'ngnix' in tutti i file all'interno di /var directory.

$ grep -r nginx /var

Cerca una stringa nell'output del comando (stdout)

Puoi usare pipe l'output per un comando e grep per il pattern dal suo output.

Nell'esempio seguente sto cercando un file con il nome 'backup' usando il comando ls

$ ls | grep backup

Qui sto facendo più pipe e sto cercando il processo "docker" e "apache" dal comando ps.

$ ps -ef | grep docker | grep apache

Espressioni regolari nei file

Espressioni regolari è un modello da abbinare per ciascuna riga di input. Basic ed Extended sono le due espressioni regolari usate dal comando grep.

Espressione regolare di base

Per impostazione predefinita, grep interpreta il modello come un'espressione regolare di base.

Il simbolo ^ (caret) - Il modello che lo segue deve essere presente all'inizio di ogni riga. Nell'esempio seguente, la stringa ^welcome corrisponderà solo se si trova all'inizio di una riga.

$ grep “^welcome” filename

Espressione regolare estesa

Usa -E ( o --extended-regexp) se vuoi che grep la comprenda come un'espressione regolare estesa.

Il comando seguente estrarrà tutti i collegamenti da un file

$ grep –Eoi '<a[^>]+>.*</a>' filename

o :per impostazione predefinita, grep stampa l'intera riga che contiene il modello di ricerca. Questa opzione indica al comando grep di stampare solo le parole corrispondenti anziché l'intera riga.

i :questa opzione chiede al comando grep di ignorare il caso mentre corrisponde al modello.

Cerca una parola intera usando grep

Il -w (word-regexp) il flag per grep farà corrispondere l'espressione data solo a parole intere.

$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:

Visualizza le righe dopo la corrispondenza della stringa

Il -A opzione che visualizza il N righe dopo la corrispondenza della stringa.

$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

Visualizza le righe prima della corrispondenza della stringa

Possiamo usare -B opzione per visualizzare N righe prima della stringa per un determinato file

$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Cerca in più stringhe

Possiamo cercare più pattern o stringhe usando l'operatore OR | e \| . -E (extended-regexp) controlla se è necessario eseguire l'escape di determinati caratteri speciali. -e è rigorosamente la bandiera per indicare il modello con cui vuoi confrontare.

Esempio 1:utilizzo dell'opzione -E

$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh

Oppure

$ grep -E "foo|bar" *.txt

Esempio 2:senza -E

$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh

Oppure

$ grep "foo\|soul\|bar" *.txt

Escludi file specifico dalla ricerca

Puoi usare l'opzione -v per ignorare la ricerca. Il comando seguente cercherà la stringa 'error' in tutti i file tranne 'syslog.log'

$ grep -r error * | grep -v ‘/\syslog.log/’

Conclusione

In questo tutorial abbiamo imparato come usare il comando grep per trovare il testo nei file. Spero che ti sia piaciuto leggere questo e per favore lascia i tuoi suggerimenti nella sezione commenti qui sotto.


Linux
  1. Come usare il comando Linux grep

  2. Come trovare più stringhe nei file??

  3. Come utilizzare il comando trova di Linux per trovare i file

  4. Comando Linux:come "trovare" solo file di testo?

  5. Come trovo tutti i file contenenti testo specifico su Linux?

Come usare il comando grep su Debian 10

Come trovare file con il comando fd in Linux

Come usare grep in Linux

Trova testo nei file su Linux usando grep

Come utilizzare più comandi in Linux per leggere file di testo di grandi dimensioni

Come trovare e sostituire il testo in Vim