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