por que não consigo remover espaços usando tr -s

por que não consigo remover espaços usando tr -s

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:]

informação relacionada