Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

grep

Il programma principale che useremo per lavorare con le espressioni regolari è il nostro vecchio amico, grep. Il nome "grep" deriva in realtà dalla frase "stampa espressione regolare globale", quindi possiamo vedere che grep ha qualcosa a che fare con le espressioni regolari. In sostanza, grep cerca nei file di testo il testo dell'occorrenza che corrisponde a un'espressione regolare specificata e restituisce qualsiasi riga contenente una corrispondenza all'output standard.


Finora abbiamo usato grep con stringhe fisse, in questo modo:


[io@linuxbox~]$ ls /usr/bin | zip grep

[io@linuxbox~]$ ls /usr/bin | zip grep


Questo elencherà tutti i file nel / Usr / bin directory i cui nomi contengono la sottostringa “zip”.

I grep il programma accetta opzioni e argomenti in questo modo:

grep [Opzioni] regex [file ...]

where regex è un'espressione regolare.

Ecco un elenco di quelli comunemente usati grep opzioni:


Tabella 19-1: Opzioni grep


Opzione Descrizione

Opzione Descrizione

-i Ignora caso. Non distinguere tra caratteri maiuscoli e minuscoli. Può anche essere specificato --ignora-caso.


Immagine

-v Invertire la corrispondenza. Normalmente, grep stampa le righe che contengono una corrispondenza.

Questa opzione fa sì che grep per stampare ogni riga che non contiene una corrispondenza. Può anche essere specificato --invertire la corrispondenza.


Immagine

-c Stampa il numero di corrispondenze (o non corrispondenze se il -v è anche specificata l'opzione) invece delle linee stesse. Può anche essere specificato --contare.


Immagine

-l Stampa il nome di ogni file che contiene una corrispondenza invece delle linee stesse. Può anche essere specificato --file-con-corrispondenze.


Immagine

-L Come l'opzione -l, ma stampa solo i nomi dei file che non contengono corrispondenze. Può anche essere specificato --files-senza-match.


Immagine

-n Prefissa ogni riga corrispondente con il numero della riga all'interno del file. Può anche essere specificato --line-number.


Immagine

-h Per le ricerche multifile, sopprimere l'output dei nomi dei file. Può anche essere specificato --no-nomefile.


Immagine


Per esplorare più a fondo grep, creiamo dei file di testo da cercare:

grep


[io@linuxbox~]$ ls /bin > dirlist-bin.txt [io@linuxbox~]$ ls /usr/bin > dirlist-usr-bin.txt [io@linuxbox~]$ ls /sbin > dirlist-sbin.txt [io@linuxbox~]$ ls /usr/sbin > dirlist-usr-sbin.txt [io@linuxbox~]$ lsdirlist*.txt

dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt

[io@linuxbox~]$ ls /bin > dirlist-bin.txt [io@linuxbox~]$ ls /usr/bin > dirlist-usr-bin.txt [io@linuxbox~]$ ls /sbin > dirlist-sbin.txt [io@linuxbox~]$ ls /usr/sbin > dirlist-usr-sbin.txt [io@linuxbox~]$ lsdirlist*.txt

dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt


Possiamo eseguire una semplice ricerca nel nostro elenco di file in questo modo:



[io@linuxbox~]$ grep bzip dirlist*.txt

dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover

[io@linuxbox~]$ grep bzip dirlist*.txt

dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover


In questo esempio, grep cerca la stringa in tutti i file elencati bzip e trova due corrispondenze, entrambe nel file directory-bin.txt. Se fossimo interessati solo all'elenco dei file che contenevano corrispondenze anziché alle corrispondenze stesse, potremmo specificare il -l opzione:



[io@linuxbox~]$ grep -l bzip dirlist*.txt

directory-bin.txt

[io@linuxbox~]$ grep -l bzip dirlist*.txt

directory-bin.txt


Al contrario, se volessimo solo vedere un elenco dei file che non contenevano una corrispondenza, potremmo fare questo:



[io@linuxbox~]$ grep -L bzip dirlist*.txt

dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt

[io@linuxbox~]$ grep -L bzip dirlist*.txt

dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt


Il miglior sistema operativo cloud computing su OnWorks: