Caratteri Jolly
Servono ad identificare più di un file nei comandi shell.
?sostituisce un singolo carattere nella posizione corrente*sostituisce un numero qualsiasi di caratteri, anche zero, nella posizione corrente[ ]racchiudono un numero di carartteri da cui ne viene selezionato uno solo[12af]– un insieme di caratteri[a-m]– un range di caratteri, inclusi i capi, in ordine ASCII crescente[^ ]seleziona un carattere non presente tra le parentesi quadre
Non confondere i Caratteri Jolly con le Espressioni Regolari
Esempi
cp *.txt sub1
mv chapter??.doc backup
rm *.o
Attenzione!!
$ rm * .o
$ .o: not found
Il seguente comando non è possibile:
mv *.txt *.doc
Procedura shell per ottenere lo stesso effetto:
for i in *.txt
do
j=`basename $i .txt`
mv $i $j.doc
done
I caratteri jolly vengono espansi dalla shell PRIMA dell'esecuzione del comando.
Esempi


Espressioni Regolari
.- un qualsiasi caratterea+- una “a”a?- zero o una “a”a*- zero o più “a”(ab)*- zero o più “ab”^a- “a” a inizio rigaa$- “a” a fine riga[ab]- il carattere “a” oppure “b”[^ab]- nè “a” nè “b”(uno|due)- la stringa “uno” oppure “due”
Sono usate dal comando grep, che viene in tre versioni:
grep- riconosce parte delle ER, velocità mediafgrep- riconosce poche ER, velocità altaegrep- riconosce tutte le ER, velocità bassa
Le espressioni regolari costituiscono una sintassi complicata
Vi sono purtroppo più motori di espressioni regolari
POSIX- standard ormai anzianoGRE- Gnu Regular ExpressionsPCRE- Perl Compatible Regular Expressions- ecc.
Comandi diversi usano motori diversi e hanno diverse capacità di riconoscimento
perl- (Pattern Extraction and Report Language) è il più completoawk- anch'esso molto completo
Esempi di Espressioni Regolari

Il nuovo comando rename
Linux in alcune distribuzioni nuove ha introdotto il comando rename, che permette di cambiare parte del nome di un numero di files, identificati da caratteri jolly, tramite una specifica basata su espressioni regolari.
La sintassi di questo comando è:
rename [opzioni] s/regexvecchio/regexnuovo/ patternjolly
ove:
s/.../.../indica sostituzioneregexvecchoè l'espressione regolare che denota componenti del nome dei file esistentiregexnuovoè l'espressione regolare che denotaa i nuovi componenti dei filepatternjollyè un'espressione basata sui caratteri jolly che indica a quali files applicare i cambiamenti
Esempio:
rename s/\.txt/\.doc/ *.txt
Ci vuole\. e non solo.perchè quest'ultimo è un metacarattere delle espressioni regolari
Le opzioni sono:
-v- verboso-n- non eseguire veramente (modalità test)-f- forza la sovrascrittura di eventuali files preesistenti
C'è anche la modalità traduzione, oltre quella sostituzione.Per esempio:
rename y/A-Z/a-z/ *
cambia tutti i nomi dei files da maiuscole a minuscole.