2011-09-06 6 views

Respuesta

70
IFS='' 
cat test.file | 
while read data 
do 
    echo "$data" 
done 

Soy consciente de que podría haber simplificado el ejemplo de algo que realmente se necesita una tubería, pero antes de que alguien dice:

IFS='' 
while read data; do 
    echo "$data" 
done < test.file 
+0

Como la secuencia de comandos lee en una sola variable por línea, los espacios dentro de los datos (después del primer espacio en blanco) se conservan independientemente. Pero el IFS vacío conserva los espacios iniciales (en ksh y bash). –

+15

Este es un lugar donde podría escribir 'while IFS = leer datos; ... ' –

+0

@glennjackman Estaba empezando a probar' exportar IFS' ..., bueno, leí tu consejo! –

1

read data dividirá los datos por IFS, que suele ser "\ t \ n". Esto preservará los espacios en blanco para usted:

var=$(cat test.file) 
echo "$var" 
0

Alternativamente, utilizar un buen archivo de herramientas de análisis, como awk

awk '{ 
# do your stuff 
print 
}' file 
2

Sólo para complementar res de DigitalRoss ponse Para el caso en que desee alterar el IFS solo para este comando, puede usar llaves. Si lo hace, el valor de IFS cambiará solo dentro del bloque. De esta manera:

(espacios mantener)
echo ' 
    word1 
    word2' | { IFS='' ; while read line ; do echo "$line" check ; done ; } 

La salida será:

word1 check 
    word2 check 
+0

Aunque el 'IFS' no ajustado ya rescata este ejemplo particular, aún debería citar '" $ line "'. En un ejemplo del mundo real, el valor aún podría contener comodines de shell y lo que no. – tripleee

8

En realidad, si no se proporciona un argumento a la llamada "leer", se lee establecer una variable por defecto llamado $ REPLY que preservará el espacio en blanco. Así que puede hacer esto:

$ cat test.file | while read; do echo "$REPLY"; done 
+1

Esto es bueno saberlo. No sé por qué obtuviste un voto negativo. Tal vez no es confiable, no sé si es igual en todas las plataformas. A veces es bueno saber por qué uno recibe un voto negativo. – 244an

+0

Esta respuesta me llevó a leer detenidamente la documentación de 'leer'. –

+0

Esto no conserva * espacios en blanco * leading * que es lo que OP está buscando –

Cuestiones relacionadas