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

jolly1

jolly2

Espressioni Regolari

  • . - un qualsiasi carattere
  • a+ - una “a”
  • a? - zero o una “a”
  • a* - zero o più “a”
  • (ab)* - zero o più “ab”
  • ^a - “a” a inizio riga
  • a$ - “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à media
  • fgrep - riconosce poche ER, velocità alta
  • egrep - riconosce tutte le ER, velocità bassa

Le espressioni regolari costituiscono una sintassi complicata
Vi sono purtroppo più motori di espressioni regolari

  • POSIX - standard ormai anziano
  • GRE - Gnu Regular Expressions
  • PCRE - Perl Compatible Regular Expressions
  • ecc.

Comandi diversi usano motori diversi e hanno diverse capacità di riconoscimento

  • perl - (Pattern Extraction and Report Language) è il più completo
  • awk - anch'esso molto completo

Esempi di Espressioni Regolari

regex1

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 sostituzione
  • regexveccho è l'espressione regolare che denota componenti del nome dei file esistenti
  • regexnuovo è l'espressione regolare che denotaa i nuovi componenti dei file
  • patternjolly è 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.

results matching ""

    No results matching ""