Il titolo è lungo, ma serve semplicemente per dire che nelle sostituzioni tramite la sed, ovvero quelle realizzate con il comando s///, è possibile utilizzare alcune sequenze di escape oltre ai soliti backreference dei gruppi "catturati" con le parentesi nell'espressione regolare di sinistra. Nella parte destra dell'espressione (cioè quella dopo la seconda barra /) si possono usare:
- \L per trasformare in minuscolo tutto quello che segue (la L sta per "lowercase");
- \l (è una elle minuscola) per trasformare in minuscolo solo il carattere seguente;
- \U per trasformare in maiuscolo tutto quello che segue (la U sta per "uppercase");
- \u per traformare in maiuscolo solo il carattere seguente;
- \E per marcare la fine della trasformazione dei caratteri.
Gli "operatori" \L e \U agiscono fino alla fine dell'espressione (delimitata dalla barra / finale) oppure fino alla \E successiva.
Quindi, per esempio, per trasformare solo la prima parola in minuscolo preservando in maiuscolo l'iniziale della seconda:
echo "CIAO Pippo" | sed -e 's/\(.*\) \(.*\)/\L\1\E \2/'
La documentazione presente sul sito della sed fa notare che tali sequenze non sono supportate da tutte le versioni del programma, anche se versioni recenti della sed derivate dalla "supersed" (ssed) non dovrebbero avere problemi. Per esempio sono riuscito a usarle correttamente con la sed presente su CentOS 5. La documentazione di cui parlo è questa:
http://sed.sourceforge.net/sedfaq3.html#s3.1.2
- \L per trasformare in minuscolo tutto quello che segue (la L sta per "lowercase");
- \l (è una elle minuscola) per trasformare in minuscolo solo il carattere seguente;
- \U per trasformare in maiuscolo tutto quello che segue (la U sta per "uppercase");
- \u per traformare in maiuscolo solo il carattere seguente;
- \E per marcare la fine della trasformazione dei caratteri.
Gli "operatori" \L e \U agiscono fino alla fine dell'espressione (delimitata dalla barra / finale) oppure fino alla \E successiva.
Quindi, per esempio, per trasformare solo la prima parola in minuscolo preservando in maiuscolo l'iniziale della seconda:
echo "CIAO Pippo" | sed -e 's/\(.*\) \(.*\)/\L\1\E \2/'
La documentazione presente sul sito della sed fa notare che tali sequenze non sono supportate da tutte le versioni del programma, anche se versioni recenti della sed derivate dalla "supersed" (ssed) non dovrebbero avere problemi. Per esempio sono riuscito a usarle correttamente con la sed presente su CentOS 5. La documentazione di cui parlo è questa:
http://sed.sourceforge.net/sedfaq3.html#s3.1.2
Commenti
Posta un commento