Digamos que tengo este archivo:
hello
world
hello world
Este programa
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
salidas
tester: hello
tester: world
tester: hello
tester: world
Me gustaría tener el for
itere sobre cada línea individualmente ignorando los espacios en blanco, es decir, las dos últimas líneas deben reemplazarse por
tester: hello world
Usando comillas for i in "$(cat $1)";
da como resultado i
siendo asignado todo el archivo a la vez. ¿Qué debo cambiar?
Respuesta aceptada:
(9 años después:)
Ambas respuestas proporcionadas fallarían en archivos sin una nueva línea al final, esto efectivamente omitirá la última línea, no producirá errores, conduciría a un desastre (aprendido de manera difícil:).
La mejor solución concisa que encontré hasta ahora que "Simplemente funciona" (tanto en bash como en sh):
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
echo "processing line: ${LINE}"
done < /path/to/input/file.txt
Para obtener una discusión más detallada, consulte esta discusión de StackOverflow:¿Cómo usar "mientras se lee" (Bash) para leer la última línea de un archivo si no hay una nueva línea al final del archivo?
Cuidado:este enfoque agrega una nueva línea adicional a la última línea si ya no hay ninguna.