`tr` reemplaza más de lo que esperaba

`tr` reemplaza más de lo que esperaba

Tengo una gran cantidad de archivos de mi trabajo docente que quiero colocar en OneDrive en una copia de seguridad periódica. Mis colegas no saben nombrar archivos, por lo que necesitan una limpieza para que OneDrive los acepte.

Lo que no puedo entender es cómo seleccionar un espacio antes de un punto.

estoy intentando esto

bash-3.2$ echo "foo bar .pdf" | tr -s " \." '\.'

y conseguir esto

foo.bar.pdfen lugar de foo bar.pdf. ¿Qué hay de malo en mi comando?

Respuesta1

trreemplazasolterocaracteres con caracteres individuales y usted le dijo que reemplazara cada espacio y cada punto con un punto (excepto que -scomprime el espacio + el punto en una sola entidad para reemplazar). En otras palabras, un espacio o punto es suficiente para activar su archivo tr.

Para reemplazar cadenas use sed:

echo "foo bar .pdf" | sed 's/ \././g'

Nota: Lo usé gporque trusaste actos globalmente, así que asumí que esto es lo que quieres en general (no importa para esta cadena en particular foo bar .pdf).

información relacionada