A ler os ficheiros linha a linha (com espaço) no Unix Shell scripting-Issue

quero ler um ficheiro linha a linha no script do Unix shell. A linha pode conter espaços de liderança e trilho e eu quero ler esses espaços também na linha. Tentei com "while read line", mas o comando read está a remover os caracteres espaciais da linha: ( Exemplo se a linha no ficheiro são: -

abcd efghijk
 abcdefg hijk

a linha deve ser lida como:- 1) "abcd efghijk" 2) " abcdefg hijk"

o que eu tentei foi isto (que não funcionou): -

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

quero uma linha que inclua caracteres de espaço e tabulação. Por favor, sugira uma maneira.

Author: Preeti Maurya, 2013-05-28

2 answers

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

Editar:

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
``<space><tab><newline>''
 25
Author: sat, 2013-05-28 11:27:33

Deseja ler as linhas raw para evitar problemas com as barras invertidas na entrada (use -r):

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

Isto irá manter os espaços em branco dentro da linha, mas remove os espaços em branco iniciais e finais. Para manter esses também, defina os SE vazios, como em

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

Isto agora é equivalente a cat < file.txt desde que file.txt termine com uma nova linha.

Lembre-se que tem de citar duas vezes "$line" para manter a divisão de palavras de dividir a linha em palavras separadas -- perdendo assim múltiplas sequências de espaços em branco.

 17
Author: Jens, 2013-05-28 11:23:46