Come utilizzare grep awk e sed

In questo articolo tratto in maniera estremamente introduttiva i tre comandi fondamentali per l’elaborazione dei file in linux, estremamente utili per la ricerca e l’elaborazione di file tramite terminale.

1. Grep

Grep viene utilizzato per cercare un termine specifico all’interno di un file.

Questo comando è molto utile quando voglio cercare velocemente le linee di un file (o genericamente di uno stream in uscita da un comando) che matchano una certa espressione.

Può fornire inoltre informazioni aggiuntive, come il numero di righe, il numero di match, il nome del file e così via.

Per esempio posso scrivere

$ grep This file.txt
Every line containing "This"
Every line containing "This"

che cerca tutte le linee contenute nel file file.txt che contengono la parola This.

E’ importante sottolineare che il comando grep supporta nativamente le espressioni regolari.

E’ possibile evitare l’escaping dei caratteri speciali per le regexp usando l’opzione -E.

1.1 Opzioni utili

opzionesignificato
-iCase insensitive
-wwhole word: cerca solo parole intere e non sottostringhe
-Rricerca ricorsiva tra i file di un path
-vInverso: mostra le linee che non matchano
-cCount: conta le linee che matchano
-lmostra solo il nome del file che matcha
-oMostra solo il contenuto matchato e non tutta la linea
-nMostra anche il numero di linea oltre che all’output standard
-EExtended regexp: permette l’utilizzo di caratteri per regexp [()...] senza usare l’escape

Un esempio di comando grep comodo è il

grep -Rin pattern path/to/search

che permette di ricercare ricorsivamente tra tutti i file e le sottodirectory del path indicato, un determinato pattern, case insensitive ed indicandone il numero di riga.

2. Awk

awk (come sed) è completamente diverso da grep in quanto è un processore di testo: conseguentemente non ha solo l’abilità di trovare una espressione che sto cercando all’interno di un testo, ma possono anche **rimuovere, aggiungere e modificare il testo del file stesso.

awk viene usato in particolare per estrarre dati e reportistica**.

In particolare awk è un intero linguaggio di programmazione costruito originariamente attorno ai file CSV, è molto potente ma è complesso da usare, sopratutto per i task semplici.
Un esempio è il seguente

$ awk '{print $2}' file.txt

che permette di printare la seconda colonna del file file.txt.

awk permette di eseguire compiti molto complessi, per esempio assumiamo di avere il file file.txt che contiene i numeri 10, 20, 60.

Il seguente codice permette di ottenere il valore medio dei numeri contenuti in tale file

$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END       {print "Average:", sum/count}' file.txt
Average: 30

3. Sed

sed (come awk) è un processore di testo. Risulta molto utile quando voglio eseguire dei cambiamenti nel contenuto di un file secondo una determinata espressione regolare.

E’ meno espressivo di awk ma è più semplice da usare, sopratutto per i compiti piccoli.

Per esempio il seguente codice

$ sed -i 's/cat/dog/' file.txt

permette di sostituire tutte le occorrenze di “cat” con “dog”.

Indice

Share
Ultimi articoli
Join

Newsletter

Nessuno spam, solo articoli interessanti ;)

Focus

Post correlati

chroot cggroups namespaces

Chroot, cgroups e namespaces

Introduzione Studiando i container spesso vengono citati chroot, cgroups e namespaces. Vediamo di capire meglio cosa sono e perché è così importante capirne il funzionamento.

container

Cosa sono i container?

Introduzione Nel modo tradizionale di sviluppo le applicazioni giravano su un determinato server utilizzando tutte le risorse che questo metteva a disposizione. Lanciando n applicazioni

Cambio di permessi su file

1. Introduzione In questo articolo fornirà una breve spiegazione di tutti i metodi comodi che vengono forniti da linux (o genericamente da sistemi unix-like) per

Codice Pragmatico

Contatti

Per informazioni, dubbi o consulenze non esitate a contattarmi.

Lascia un messaggio

Ricevi le ultime news

Iscrivi alla newsletter

Solo articoli interessanti, promesso ;)