Si estoy teniendo una línea como:
Thhiisss iisss mmyyy nameeee
Quiero imprimir esto como:
This is my name
¿Cuál es el comando unix para esto?
Si estoy teniendo una línea como:
Thhiisss iisss mmyyy nameeee
Quiero imprimir esto como:
This is my name
¿Cuál es el comando unix para esto?
Respuestas:
Con tr
:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
Explicación: El -s
cambio de tr
"apretar" caracteres de repetición. Como se muestra, el interruptor se puede usar con una variedad de caracteres: a
a z
.
En un sistema GNU, deberá usar sed
o similar si su entorno local utiliza caracteres multibyte ( como sugiere jimmij ) porque GNU tr
solo puede hacer referencia a un carácter por byte. En un escenario ASCII puede eliminar todos los duplicados w / tr
como:
LC_ALL=C tr -s '\0-\255' <input
Entonces...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
...huellas dactilares...
This is my name
También puedes hacerlo de forma selectiva haciendo referencia a tus objetivos por rango:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...o...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... que resultan ser lo mismo, y que ambos imprimen:
Thhiisss iisss mmyyy nameeee
... o uso [:punct:]
, [:digit:]
, [:lower:]
, [:alpha:]
o lo que le gustaría. También puede negar la selección con -c
...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
...huellas dactilares...
TTTThis is my name