Leitura linha a linha (com espaço) do ficheiro em Unix Shell scripting - Edição

Quero ler um ficheiro linha a linha em Unix shell scripting. A linha pode conter espaços de entrada e de saída e eu quero ler esses espaços também na linha. Tentei com "enquanto lia linha" mas ler comando é remover caracteres de espaço da linha :( Exemplo se linha no ficheiro são:-

abcd efghijk
 abcdefg hijk

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 que a linha inclua caracteres de espaço e tabulação. Por favor, sugira uma forma.

Solução

Experimente isto,

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
``''
Comentários (2)

Pretende ler linhas trabalho para evitar problemas de retrocesso na entrada (utilizar -r):

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

Isto manterá os espaços brancos dentro da linha, mas remove os espaços brancos de chumbo e de fuga. Para manter estes também, definir o IFS vazio, como em

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

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

Note-se que deve duplicar a citação "$line" para evitar que as palavras se dividam em palavras separadas - perdendo assim múltiplas sequências de espaços em branco.

Comentários (0)