Se estou tendo uma linha como:
Thhiisss iisss mmyyy nameeee
Quero imprimir isso como:
This is my name
Qual é o comando unix para isso?
Se estou tendo uma linha como:
Thhiisss iisss mmyyy nameeee
Quero imprimir isso como:
This is my name
Qual é o comando unix para isso?
Respostas:
Em um sistema GNU, você precisará usar sed
ou semelhante se o seu código do idioma usar caracteres multibyte ( como jimmij sugere ) porque o GNU tr
pode fazer referência apenas a um caractere por byte. Em um código de idioma ASCII, você pode remover todas as duplicatas com tr
:
LC_ALL=C tr -s '\0-\255' <input
Então...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... imprime ...
This is my name
Você também pode fazer isso de forma seletiva consultando seus destinos por intervalo:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...ou...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... que funcionam da mesma forma e que imprimem:
Thhiisss iisss mmyyy nameeee
... ou utilização [:punct:]
, [:digit:]
, [:lower:]
, [:alpha:]
ou o que quer que você gostaria. Você também pode negar a seleção w / -c
so ...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... imprime ...
TTTThis is my name