2013-05-28 19 views
15

Voglio leggere un file riga per riga nello script di shell Unix. La linea può contenere spazi iniziali e finali e voglio leggere quegli spazi anche nella linea. Ho provato con "while read riga", ma Comando di lettura sta rimuovendo i caratteri di spazio dalla linea :( esempio se la linea nel file sono: -Lettura file riga per riga (con spazio) in Unix Shell scripting - Numero

abcd efghijk 
abcdefg hijk 

linea dovrebbe essere letto come: - 1) "abcd efghijk" 2) " abcdefg hijk"

Cosa ho provato questo (che non lavorato): -..

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

voglio linea compresi i caratteri spazio e tabulazione in esso si prega di suggerire un modo

risposta

22

Prova questo,

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

EDIT:

Da 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>'' 
+0

Ha funzionato! Grazie. Plz spiega l'IFS. –

+0

ha aggiornato il post. – sat

+7

Idiomaticamente, dovresti specificare il 'IFS 'vuoto solo per l'istruzione' read', per evitare strani effetti collaterali: 'while IFS = read line' – l0b0

15

Si desidera leggere prime linee per evitare problemi con i backslash in ingresso (utilizzare -r) :

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

Ciò manterrà gli spazi bianchi all'interno della linea, ma rimuoverà gli spazi bianchi iniziali e finali. Per mantenere quelle pure, impostare l'IFS vuoto, come in

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

Questo ora è un equivalente di cat < file.txt finché file.txt termina con una nuova riga.

Si noti che è necessario raddoppiare il numero "$line" per impedire che la divisione delle parole divida la linea in parole separate, perdendo così più sequenze di spazi bianchi.

+0

Grazie per averlo descritto. –

+2

@SourabhSaxena Prego. Il modo per esprimere "grazie" su Stackoverflow è di aggiornare facendo clic sulla freccia su a sinistra di una risposta. – Jens

Problemi correlati