Linux: l’importanza di conoscere i comandi sed e awk

Per un sistemista Linux è importantissimo sapere usare la Shell ed i suoi comandi come sed e awk. Scriverò un piccola introduzione con esempi per farvi capire le potenzialità di questi comandi.

Il comando sed
sed è un editor di flusso: opera sui dati in modo seriale come li leggerebbe una persona. Semplificando si può pensare a sed come un modo automatico per cercare e sostituire delle parole con altre. Per esempio, questo comando sostituisce tutte le istanze di “marco” con “bruni” all’interno del file di testo prova.txt:

sed -e 's/marco/bruni/g' prova.txt

Chiunque abbia usato le espressioni regolari all’interno di un editor di testo o linguaggio di programmazione troverà sed facile da afferrare.

Il comando awk
Awk è un pò più ostico e ci vuole più tempo per impararlo. E’ un comando orientato ai record cioè awk è lo strumento giusto da utilizzare quando i dati contengono campi delimitati che si desidera manipolare.

Considerate questo elenco di nomi in un file persone.txt .
Marco Bruni
Mario Rossi
Marco Verdi
Giovanni Neri

per estrarre solo il nome, possiamo usare questo comando:

awk '{print $1}' persone.txt
Marco
Mario
Marco
Giovanni

oppure possiamo cercare solo le persone che si chiamano Marco

awk '$1 ~ /Marco/ {print}' persone.txt
Marco Bruni
Marco Verdi

Awk può fare molto di più, e dispone di nozioni di programmazione come variabili, condizionali e cicli. Ma anche solo una conoscenza di base di come abbinare ed estrarre campi ti porterà lontano. Se volete approfondire l’argomento vi consiglio di leggere questo manuale: Guida a a Sed e Awk

Voi cosa ne pensate?

Linux Shell: Integrare l’ output di ls

ls è uno dei comandi base di UNIX, e quindi anche per GNU/Linux, con esso è possibile controllare directories, files, permessi, ecc., il suo output è dettagliato e ben strutturato, ma può anche essere migliorato.

Come?

Provate a mandare in esecuzione:

$ (printf “PERMESSI LINKS PROPRIETARIO GRUPPO DIMENSIONE MESE GIORNO HH:MM PROGRAMMA” ; ls -l | sed 1d) | column -t

Articoli correlati:
https://www.marcobruni.info/it/category/linux
https://www.marcobruni.info/it/category/shell

Linux Shell: Zippare e spostare

Continuiamo ad esplorare il fantastico mondo di Gnu/Linux.

Il comando di oggi, non fa altro che comprimere la directory di lavoro al volo, evidenziando i progressi, e spostandola nella posizione voluta.

tar -cf – . | pv -s $(du -sb . | awk ‘{print $1}’) | gzip > out.tgz

Ciò che accade è che indichiamo a tar di creare “-c”, un archivio di tutti i file nella directory corrente “.” (ricorsivamente), stampando l output dei dati verso lo stdout “-f -”, poi andiamo a specificare la dimensione “-s” di tutti i file nella directory corrente, per il comando “pv”, il prossimo passo: du “-sb. | awk? (Print $ 1)?” restituisce il numero di byte della directory corrente, poi zippiamo tutto il contenuto ed inviamo l outpup verso il file “out.tgz”

Articoli correlati:
Linux shell: Scompattare dalla rete

Linux, il meglio degli ultimi 10 anni secondo IBM developerWorks

Linux shell: Scompattare dalla rete

Da oggi comincio a pubblicare degli articoli che riguardano GNU/Linux che è un sistema operativo libero di tipo Unix ed in particolare la shell che non è l’ascella 🙂 ma è un programma che permette agli utenti di comunicare con il sistema e di avviare altri programmi.

Pubblicherò periodicamente questi consigli per diventare un ottimo amministratore di sistemi GNU/Linux 🙂

Perchè non provare a spacchettare un tarball direttamente dalla rete, senza salvare il paccheto localmente?

Proviamoci:

Usando wget digitate ed esguite questo comando: wget -O – http://IndirizzoWeb/a.gz | tar xz
Oppure Curl digitate ed esguite questo comando: curl http://IndirizzoWeb/a.gz | tar xz

Se l’archivio è compresso con bzip2 utilizzare “xj” come opzioni a tar cioè tar xj.