
quando eu entro no seguinte
echo "This is for testing" | tr -s [:space:]
Eu entendi isso...
This is for testing
Eu esperava remover os vários espaços e ter apenas um espaço entre as palavras. Não vejo o que estou fazendo de errado.
Responder1
Em tr -s [:space:]
, o que não está entre aspas [:space:]
será tratado pelo shell como um glob, e se você tiver um arquivo que corresponda a esse glob (um nome de arquivo com um único caractere de qualquer um de :
, a
, c
, e
, p
, s
), então seu shell (provavelmente bash) irá expandir isso glob para esse nome de arquivo:
bash-5.1$ echo tr -s [:space:]
tr -s [:space:]
bash-5.1$ touch c
bash-5.1$ echo tr -s [:space:]
tr -s c
(Também pode fazer outras coisas com base nas opções do shell.)
Portanto, use aspas para que o shell não interprete [:space:]
:
echo "This is for testing" | tr -s '[:space:]'
Responder2
Funciona para mim ao comprimir os espaços, talvez não funcione para você porque esses espaços no seu texto de exemplo não são realmente espaços,
Eles poderiam ser guias
Experimente isso
echo "This is for testing" | tr \\t " "
ou, se houver várias guias, você pode tentar usar
echo "This is for testing" | tr \\t " " | tr -s [:space:]