[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ A ] [ B ] [ C ] [ D ] [ successivo ]


Debian Tutorial
Capitolo 11 - Strumenti per il testo


head, tail, grep, wc, tr, sed, perl e così via.


11.1 Espressioni regolari

Una espressione regolare è una descrizione di un insieme di caratteri. Questa descrizione può essere usata per cercare in un file un testo che corrisponda alla espressione regolare. Le espressioni regolari sono analoghe ai metacaratteri della shell (vedere Espansione dei nomi di file ("Metacaratteri"), Sezione 6.6), ma sono sia più complicate che più potenti.

Una espressione regolare è composta di testo e metacaratteri. Un metacarattere è semplicemente un carattere con un significato particolare. I metacaratteri includono: . * [] - \ ^ $.

Se una espressione regolare contiene solo testo (nessun metacarattere), allora essa corrisponde a quel testo. Per esempio, l'espressione regolare 'la mia espressione regolare' corrisponde al testo 'la mia espressione regolare' e a niente altro. Le espressioni regolari sono generalmente sensibili alle minuscole/maiuscole.

Si può utilizzare il comando egrep per mostrare tutte le righe in un file che contengono un'espressione regolare. La sua sintassi è:

egrep 'regexp' nomefile1 ... [16]

Per esempio, per trovare tutte le righe che contengono la parola GNU nella GPL, digitare:

     egrep 'GNU' /usr/doc/copyright/GPL

egrep stampa le righe sullo standard output.

Se si vogliono tutte le righe che contengono freedom, seguito da altro testo non determinato, seguito da GNU, si può fare:

     egrep 'freedom.*GNU' /usr/doc/copyright/GPL

. significa "qualsiasi carattere"; e * significa "zero o più volte la cosa precedente", in questo caso "zero o più caratteri qualsiasi". Così .* corrisponde praticamente a qualsiasi testo. egrep trova corrispondenze solo su una base riga per riga, così freedom e GNU devono essere sulla stessa riga.

Qui c'è un sommario dei metacaratteri delle espressioni regolari:

.

Corrisponde ad ogni singolo carattere, escluso il carattere di a capo.

*

Corrisponde a zero o più occorrenze della cosa che lo precede. Così l'espressione a* corrisponde a nessuna o più lettere a minuscole e .* corrisponde a zero o più caratteri.

[caratteri]

Le parentesi quadre devono contenere uno o più caratteri; l'espressione contenuta tra le parentesi quadre corrisponde ad esattamente uno dei caratteri dell'insieme. Così [abc] corrisponde a una a, una b o una c; non ha corrispondenza con 0 caratteri o con altri caratteri diversi da questi tre.

^

Aggancia la ricerca all'inizio della riga. L'espressione ^Il corrisponde a Il solo se è all'inizio della riga; non ci possono essere spazi o altri caratteri prima di Il. Se si vuole permettere la presenza di spazi, si può permetterne zero o più così: ^ *Il.

$

Aggancia la ricerca alla fine della riga. fine$ richiede che il testo fine si trovi alla fine della riga, senza altri spazi o testo.

[^caratteri]

^ inverte il senso di una lista di caratteri tra parentesi quadre. Così [^abc] corrisponde ad ogni singolo carattere, eccetto a, b, o c.

[carattere-carattere]

Si possono includere in una lista tra parentesi quadre degli intervalli di caratteri. Per avere una corrispondenza con tutte le lettere minuscole, si usi [a-z]. Si può avere più di un intervallo; così per avere una corrispondenza con le prime tre o le ultime tre lettere dell'alfabeto, si provi [a-cx-z]. Per ottenere ogni lettera, maiuscola o minuscola, si provi [a-zA-Z]. Si possono mescolare intervalli con caratteri singoli e con il metacarattere ^; per esempio, [^a-zBZ] significa "ogni cosa escluso una lettera minuscola, una B maiuscola o una Z maiuscola".

()

Si possono usare le parentesi per raggruppare parti dell'espressione regolare, proprio come si fa in una espressione matematica.

|

| significa "oppure"; lo si può usare per ottenere una serie di espressioni alternative. Abitualmente si preferisce mettere le alternative tra parentesi, così: c(ad|ab|at) che corrisponde a cad o cab o cat. Senza le parentesi, corrisponderebbe invece a cad o ab o at.

\

Protegge ogni carattere speciale; se si vuole trovare letteralmente un *, digitare \*. La barra significa ignorare il significato speciale di *.

Qui ci sono alcuni altri esempi, per aiutare a prendere la mano:

p.pa

corrisponde a pipa, pupa, papale

p\.pa

corrisponde a p.pa, p.pap

cal*i

corrisponde a cai, cali, calli

car.*i

corrisponde a cartelli, cartoni, carretti

xyz.*

corrisponde a xyz con qualsiasi cosa dopo di esso, alcuni strumenti tipo egrep, faranno una corrispondenza solo fino alla fine della riga.

^Il

corrisponde a Il all'inizio di una riga.

atime$

corrisponde a atime alla fine di una riga.

^Solo$

corrisponde a una riga che consiste solamente della parola Solo, con nessuno spazio, nessun altro carattere, niente. Solo Solo è permesso.

m[eou]la

corrisponde a mela, mola, mula

Ver[D-F]

corrisponde a VerD, VerE, VerF

Ver[^0-9]

corrisponde a Ver seguito da un qualsiasi carattere che non sia una cifra.

cal[dm][io]

corrisponde a caldi, calmi, caldo, calmo

[A-Za-z][A-Za-z]*

corrisponde a ogni parola costituita da sole lettere e da almeno una lettera. Non farà corrispondenza con numeri o spazi.


[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ A ] [ B ] [ C ] [ D ] [ successivo ]


Debian Tutorial

30 settembre 2007

Havoc Pennington hp@debian.org