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' -s
interruttore di tr
"stringe" ripete i caratteri. Come mostrato, l'interruttore può essere utilizzato con una gamma di caratteri: a
a z
.
Su un sistema GNU dovrai usare sed
o simili se la tua locale usa caratteri multibyte ( come suggerisce jimmij ) perché GNU tr
può 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