Como percorrer as linhas em um arquivo que contém * em cada linha

0

Eu tenho um arquivo que contém cerca de 800 linhas. Todas as linhas contém 1 * caractere nele.

Eu preciso percorrer as linhas no arquivo, então usei o seguinte loop

for i in $(cat file_path); do echo $i; done

Infelizmente, não funcionou.

Quando eu tento com outros arquivos, mas as linhas no arquivo não contêm o caractere *, o loop está funcionando bem.

Como posso resolver isso?

    
por Fanooos 13.05.2015 / 09:30

3 respostas

-2

Você precisa usar o seguinte formato:

#!/bin/bash
SAVEIFS=$IFS
while IFS= read -r line <&3
do
    echo "$line"
done 3< myfile.txt
IFS=$SAVEIFS

O teste é:

root@debian:/home/mohsen/test/shell# ./linebylibe.sh 
ff
dd
gg
tt
tt
ww
ee

E meu myfile.txt é:

root@debian:/home/mohsen/test/shell# cat myfile.txt 
ff
dd
gg
tt
tt
ww
ee
    
por 13.05.2015 / 09:38
5

Você tem alguns problemas com seu código:

Você pode corrigi-los usando while loop:

while IFS= read -r line <&3; do
  { printf '%s\n' "$line"; } 3<&-
done 3< file

[ -z "$line" ] || printf %s "$line"

Uma observação de que o uso de loops while para processar arquivos de texto é considerada uma prática ruim no shell POSIX.

    
por 13.05.2015 / 09:43
-1

Você pode usar while :

while read line; do echo "$line"; done < test.txt

ou defina um caractere separado IFS :

SAVEIFS=$IFS; IFS="\n"; for i in $(cat test.txt); do echo "$i"; done; IFS=$SAVEIFS
    
por 13.05.2015 / 09:44