Convierte el contenido del file a minúsculas y almacena el resultado en el mismo file

Uso el siguiente command para convertir el contenido de mi file de input a minúsculas

tr AZ az < input > output 

Este command funciona bien.

Pero cuando trato de almacenar la salida en el file de input, no está funcionando. El file de input está vacío después de ejecutar el command. ¿Por qué?

  tr AZ az < input > input 

Pero cuando trato de almacenar la salida en el file de input, no está funcionando. El file de input está vacío después de ejecutar el command. ¿Por qué?

Porque la > input hace que el shell trunque el file antes de ejecutar el command tr . Incidentalmente, puede evitar esto con un event handling descriptores más avanzado en Bash :

 exec 8<>input exec 9<>input tr '[AZ]' '[az]' <&8 >&9 

El exec #<>file abre un file en el descriptor # en modo lectura-escritura sin truncar.

Si tiene GNU sed , puede usar

 sed -i 's/.*/\L&/' input 
  • -i modificar file en su lugar
  • s/old/new/ replace old con new
  • .* cualquier personaje en cada línea
  • \L minúscula
  • & el patrón combinado