Capitolo 17. Espressioni Regolari

 

. . . the intellectual activity associated with software development is largely one of gaining insight.

 Stowe Boyd
Sommario
17.1. Una breve introduzione alle Espressioni Regolari
17.2. Globbing

Per sfruttare pienamente la potenza dello scripting di shell, occorre conoscere a fondo le Espressioni Regolari. Alcune utility e comandi comunemente impiegati negli script, come grep, expr, sed e awk, interpretano ed usano le ER.

17.1. Una breve introduzione alle Espressioni Regolari

Un'espressione è una stringa di caratteri. Quei caratteri la cui interpretazione va al di là del loro significato letterale vengono chiamati metacaratteri. Le virgolette, ad esempio, possono indicare la frase di una persona in un dialogo, idem o il meta-significato dei simboli che le seguono. Le Espressioni Regolari sono serie di caratteri e/o metacaratteri che verificano (o specificano) dei modelli.

Un'Espressione Regolare è formata da:

Le Espressioni Regolari (ER) vengono principalmente impiegate nelle ricerche di un testo e nella manipolazione di stringhe. Una ER verifica un singolo carattere o una serie di caratteri -- una sottostringa o una stringa intera.

Nota

Alcune versioni di sed, ed e ex supportano le versioni con escaping delle Espressioni Regolari estese descritte prima allo stesso modo delle utility GNU

Sed, awk e Perl, usati come filtri negli script, trattano le ER come argomenti, quando devono "vagliare" o trasformare file o flussi di I/O. Vedi Esempio A-12 e Esempio A-17 per una descrizione di questa funzionalità.

Il riferimento fondamentale per questo complesso argomento è Mastering Regular Expressions di Friedl. Anche Sed & Awk, di Dougherty e Robbins fornisce una lucidissima trattazione delle ER. Vedi Bibliografia per ulteriori informazioni su questi libri.

Note

[1]

Poiché sed, awk e grep elaborano le righe, di solito non dovrebbe presentarsi la necessità di verificare un ritorno a capo. In quei casi in cui dovesse esserci un ritorno a capo, perché inserito in una espressione su più righe, il punto lo verifica.

#!/bin/bash

sed -e 'N;s/.*/[&]/' << EOF   # Here document
riga1
riga2
EOF
# OUTPUT:
# [riga1
# riga2]



echo

awk '{ $0=$1 "\n" $2; if (/riga.1/) {print}}' << EOF
riga 1
riga 2
EOF
# OUTPUT:
# riga
# 1


# Grazie, S.C.

exit 0