Se sto avendo una linea come:
Thhiisss iisss mmyyy nameeee
Voglio stampare questo come:
This is my name
Qual è il comando unix per questo?
Se sto avendo una linea come:
Thhiisss iisss mmyyy nameeee
Voglio stampare questo come:
This is my name
Qual è il comando unix per questo?
Risposte:
Con tr:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
Spiegazione: L' -sinterruttore di tr"stringe" ripete i caratteri. Come mostrato, l'interruttore può essere utilizzato con una gamma di caratteri: aa z.
Su un sistema GNU dovrai usare sedo simili se la tua locale usa caratteri multibyte ( come suggerisce jimmij ) perché GNU trpuò fare riferimento solo a un carattere per byte. In una locale ASCII è possibile rimuovere tutti i duplicati con tr:
LC_ALL=C tr -s '\0-\255' <input
Così...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... stampe ...
This is my name
Puoi anche farlo in modo selettivo facendo riferimento ai tuoi obiettivi per intervallo:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...o...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... che risultano essere la stessa cosa e che entrambi stampano:
Thhiisss iisss mmyyy nameeee
... o l'uso [:punct:], [:digit:], [:lower:], [:alpha:]o qualsiasi altra cosa che si desidera. Puoi anche annullare la selezione con -c...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... stampe ...
TTTThis is my name