Lectura de un archivo línea por línea (con espacio) en la secuencia de comandos de Unix Shell - Problema

Quiero leer un archivo línea por línea en Unix shell scripting. La línea puede contener espacios iniciales y finales y quiero leer esos espacios también en la línea. He intentado con "mientras que la línea de lectura", pero leer comando es la eliminación de los caracteres de espacio de la línea :( Ejemplo si la línea en el archivo son:-

abcd efghijk
 abcdefg hijk

la línea debería leerse como:- 1) "abcd efghijk" 2) "abcdefg hijk"

Lo que he probado es esto (que no funcionó):-

while read line
do
   echo $line
done < file.txt

Quiero que la línea incluyendo espacio y caracteres de tabulación en ella. Por favor, sugiera una manera.

Solución

Prueba esto,

IFS=''
while read line
do
echo $line
done < file.txt

EDIT:

De man bash

IFS - The Internal Field Separator that is used for word
splitting after expansion and to split lines into words
with  the  read  builtin  command. The default value is
``''
Comentarios (2)

Es conveniente leer las líneas raw para evitar problemas con las barras invertidas en la entrada (utilice -r):

while read -r line; do
   printf "\n" "$line"
done < file.txt

Esto mantendrá los espacios en blanco dentro de la línea, pero elimina los espacios en blanco iniciales y finales. Para mantenerlos también, ponga el IFS vacío, como en

while IFS= read -r line; do
   printf "%s\n" "$line"
done < file.txt

Esto es equivalente a cat < archivo.txt siempre que archivo.txt termine con una nueva línea.

Tenga en cuenta que debe entrecomillar doblemente `"$línea"para evitar que el desdoblamiento de palabras divida la línea en palabras separadas, perdiendo así múltiples secuencias de espacios en blanco.

Comentarios (0)