Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Alternanza

La prima delle funzionalità estese delle espressioni regolari di cui parleremo è chiamata alternanza, che è la struttura che consente di verificare una corrispondenza tra un insieme di espressioni. Proprio come un'espressione tra parentesi consente la corrispondenza di un singolo carattere da un insieme di caratteri specificati, l'alternanza consente le corrispondenze da un insieme di stringhe o altre espressioni regolari.

Per dimostrare, useremo grep insieme a eco. Per prima cosa, proviamo una semplice vecchia corrispondenza di stringhe:



[io@linuxbox~]$ echo "AAA" | grep AAA

AAA

[io@linuxbox~]$ echo "BBB" | grep AAA

[io@linuxbox~]$

[io@linuxbox~]$ echo "AAA" | grep AAA

AAA

[io@linuxbox~]$ echo "BBB" | grep AAA

[io@linuxbox~]$


Un esempio piuttosto semplice, in cui convogliamo l'output di eco ai miglioramenti grep e vedere i risultati. Quando si verifica una corrispondenza, la vediamo stampata; quando non si verifica alcuna corrispondenza, non vediamo risultati.

Ora aggiungeremo l'alternanza, indicata dal metacarattere della barra verticale:



[io@linuxbox~]$ echo "AAA" | grep -E 'AAA|BBB'

AAA

[io@linuxbox~]$ echo "BBB" | grep -E 'AAA|BBB'

BBB

[io@linuxbox~]$ echo "CCC" | grep -E 'AAA|BBB'

[io@linuxbox~]$

[io@linuxbox~]$ echo "AAA" | grep -E 'AAA|BBB'

AAA

[io@linuxbox~]$ echo "BBB" | grep -E 'AAA|BBB'

BBB

[io@linuxbox~]$ echo "CCC" | grep -E 'AAA|BBB'

[io@linuxbox~]$


Qui vediamo l'espressione regolare 'AAA|BBB', che significa "corrisponde alla stringa AAA o la stringa BBB.” Nota che poiché questa è una funzionalità estesa, abbiamo aggiunto il -E opzione a grep (anche se avremmo potuto semplicemente usare il egrep programma) e abbiamo racchiuso l'espressione regolare tra virgolette per impedire alla shell di interpretare il metacarattere della barra verticale come un operatore pipe. L'alternanza non è limitata a due scelte:



[io@linuxbox~]$ echo "AAA" | grep -E 'AAA|BBB|CCC'

AAA

[io@linuxbox~]$ echo "AAA" | grep -E 'AAA|BBB|CCC'

AAA


Per combinare l'alternanza con altri elementi dell'espressione regolare, possiamo usare () per separare l'alternanza:



[io@linuxbox~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt

[io@linuxbox~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt


Questa espressione corrisponderà ai nomi di file nei nostri elenchi che iniziano con "bz", "gz" o "zip". Se avessimo lasciato le parentesi, il significato di questa espressione regolare:



[io@linuxbox~]$ grep -Eh '^bz|gz|zip' dirlist*.txt

[io@linuxbox~]$ grep -Eh '^bz|gz|zip' dirlist*.txt


cambia in modo che corrisponda a qualsiasi nome di file che inizia con "bz" o contiene "gz" o contiene "cerniera lampo".


Il miglior sistema operativo cloud computing su OnWorks: