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.
2 answers
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>''
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.