¿Por qué no puedo eliminar espacios usando tr -s?

¿Por qué no puedo eliminar espacios usando tr -s?

cuando ingreso lo siguiente

echo "This   is   for    testing" | tr -s [:space:]

Entiendo esto...

This   is   for    testing

Esperaba eliminar los múltiples espacios y solo tener un espacio entre las palabras. No veo lo que estoy haciendo mal.

Respuesta1

En tr -s [:space:], el [:space:]shell tratará lo que no está entre comillas como un globo, y si tiene un archivo que coincide con ese globo (un nombre de archivo con un solo carácter de cualquiera de :, a, c, e, p) s, entonces su shell (probablemente bash) lo expandirá. pegue a ese nombre de archivo:

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

(También podría hacer otras cosas según las opciones del shell).

Entonces, use comillas para que el shell no interprete [:space:]:

echo "This   is   for    testing" | tr -s '[:space:]'

Respuesta2

A mí me funciona para apretar los espacios, tal vez no funcione para ti porque esos espacios en tu texto de muestra no son realmente espacios.

Podrían ser pestañas

Prueba esto

echo "This   is   for   testing" | tr \\t " "

o, si hay varias pestañas, puede intentar usar

echo "This  is   for   testing" | tr \\t " " | tr -s [:space:]

información relacionada