Linux Tutorial – Puntata 22

di jolek78

Care/i fruitrici e fruitori del blog, in questi post – ogni domenica mattina – si parlerà del sistema operativo GNU/Linux e degli strumenti per utilizzarlo al massimo delle potenzialità. Cercheremo di spiegare come funziona, cosa è il kernel, come costruirsi una vpn, come settare un firewall e giocare col terminale, usare adb e altro. Se il capitalismo della sorveglianza ci vuole passivi consumatori-consumatrici di servizi noi si risponde con un po’ di “cultura informatica” e un MARAMEO (quasi affettuoso). Buona lettura!

Dunque, la puntata di oggi sarà piuttosto teorica, quasi introduttiva. Oggi parleremo delle espressioni regolari, o “regex“, una serie di caratteri che servono per selezionare e filtrare alcune cose in luogo di altre. Non parleremo ovviamente di “tutte” le espressioni regolari – questo non è un tutorial di programmazione in bash – ma soltanto di quelle che più comunemente si usano sulla bash shell. Immaginate pertanto di avere una bicicletta, e di voler selezionare soltanto il bullone che tiene legato il sellino all’intero corpo della bici. Le espressioni regolari servono proprio a questo: selezionano, filtrano ed estraggono/inseriscono informazioni dal/nel contesto. Non storcete il naso voi sysadmin e coders: lo so, è molto più complesso di cosi’, che servono per definire cose, per modificare cose e anche per estrarre cose, ma noi qui si parla delle regex solo per anticipare le prossime puntate del tutorial in cui si descriverà il funzionamento dei programmi find, grep, sed, tail, awk e altri come tr e curl. Quindi se ne volete sapere di più subito ora, andate qui. Se ci seguite nel tutorial invece, e seguite lo schema che gli stiamo dando, buona lettura. Per cominciare creiamo un file che abbia al suo interno alcuni nomi (piuttosto celebri nel mondo dell’open source):

bottega@bottegadelbarbieri  ~  touch names.txt

bottega@bottegadelbarbieri  ~  echo "linus torvalds" >> names.txt 
bottega@bottegadelbarbieri  ~  echo "eric raymond" >> names.txt 
bottega@bottegadelbarbieri  ~  echo "richard stallman" >> names.txt
bottega@bottegadelbarbieri  ~  echo "Linus Torvalds" >> names.txt 
bottega@bottegadelbarbieri  ~  echo "Eric Raymond" >> names.txt 
bottega@bottegadelbarbieri  ~  echo "Richard Stallman" >> names.txt

bottega@bottegadelbarbieri  ~  cat names.txt 
linus torvalds
eric raymond
richard stallman
Linus Torvalds
Eric Raymond
Richard Stallman

Caratteri speciali – selettori

.

Questo simbolo corrisponde a definire singolarmente ogni carattere. Per esempio, nel file di cui sopra, per selezionare tutte le parole che cominciano con “to”, che hanno tre caratteri in mezzo  e che finiscono con “lds”, scriveremo:

bottega@bottegadelbarbieri  ~  <comando> to...lds

*

Questo simbolo corrisponde a definire letteralmente qualsiasi carattere. Per esempio, nel file di cui sopra, per selezionare tutte le parole che cominciano con “ray” e finiscono con qualsiasi carattere, scriveremo:

bottega@bottegadelbarbieri  ~  <comando> ray*

?

Questo simbolo corrisponde a definire la presenza di un carattere random, posto precedentemente al simbolo, una o zero volte. Volendo, per esempio, segnalare il carattere “h” all’interno della parola “richard” scriveremo:

bottega@bottegadelbarbieri  ~  <comando> rich?ard

+

Questo simbolo corrisponde a definire la presenza di un carattere random, posto successivamente al simbolo, una o zero volte. Volendo, per esempio, segnalare il carattere “y” all’interno della parola “raymond” scriveremo:

bottega@bottegadelbarbieri  ~  <comando> ra+ymond

^

Questo simbolo corrisponde a definire la presenza di una serie di caratteri, o di una parola intera, all’inizio di una linea. Volendo, per esempio, segnalare l’intera linea che contiene le due parole “linus torvalds” scriveremo

bottega@bottegadelbarbieri  ~  <comando> ^lin

$

Questo simbolo corrisponde a definire la presenza di una serie di caratteri, o di una parola intera, alla fine di una linea. Volendo, per esempio, segnalare l’intera linea che contiene le due parole “linus torvalds” scriveremo

bottega@bottegadelbarbieri  ~  <comando> lds$

Menzione particolare va fatta per:

Parentesi

Ci sono tre tipi di parentesi da poter usare su bash shell:

[]

Si usa normalmente per inserire al suo interno più di uno dei caratteri speciali che abbiamo descritto precedentemente, e se necessario anche lettere e numeri, nel caso si voglia aggiungere selezionare o rimuovere alcuni caratteri.

()

Si usa normalmente per due scopi: creare una subshell – un sotto comando – sotto il simbolo ( ) e una operazione aritmetica se la includiamo all’interno dei caratteri (( ))

{}

Questa è la serie di parentesi più utilizzata. Al suo interno può includere sia caratteri speciali, sia caratteri normali, sia statement in bash, i classici if then else fi e successivi

Pipe

|

Questo carattere è letteralmente importantissimo. Permette di aggiungere più comandi all’interno della stessa stessa linea, uno eseguito di seguito all’altro.

bottega@bottegadelbarbieri  ~  <comando>| <comando> | <comando>

Escape

\

Questo carattere invece conclude la serie di comandi, va a capo e comincia un’altra operazione

bottega@bottegadelbarbieri  ~  <comando>| <comando> | <comando> \
                                      <comando>| <comando> \
                                      <comando>| <comando>

Esempi random


bottega@bottegadelbarbieri  ~  cat names.txt | grep ric*
eric raymond
richard stallman
Eric Raymond
bottega@bottegadelbarbieri  ~  cat names.txt | grep ^Eric
Eric Raymond

bottega@bottegadelbarbieri  ~  cat names.txt | grep ^[Ee]ric
eric raymond
Eric Raymond

bottega@bottegadelbarbieri  ~  cat names.txt | grep man$
richard stallman
Richard Stallman

Questi esempi sono soltanto per non lasciarvi a bocca asciutta, per farvi vedere che non si sta parlando di qualcosa di astratto ma estremamente concreto, e per introdurvi la prossima puntata in cui parleremo del comando grep, usato proprio per filtrare caratteri come abbiamo fatto precedentemente.


 

Alla prossima settimana!
jolek78

>> Indice <<
Puntata 21 < > Puntata 23

Il logo “Tux Linux” e’ stato realizzato e distribuito dall’artista deiby-ybied su Deviantart in licenza Creative Commons BY-NC-SA 3.0

jolek78
Un tizio che pensava di essere uno scienziato. Si ritrovò divulgatore scientifico. Poi si addormentò e si svegliò informatico. Ma era sempre lui.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *