GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo recorrer las líneas de un archivo?

Digamos que tengo este archivo:

hello
world
hello world

Este programa

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

salidas

tester: hello
tester: world
tester: hello
tester: world

Me gustaría tener el for itere sobre cada línea individualmente ignorando los espacios en blanco, es decir, las dos últimas líneas deben reemplazarse por

tester: hello world

Usando comillas for i in "$(cat $1)"; da como resultado i siendo asignado todo el archivo a la vez. ¿Qué debo cambiar?

Respuesta aceptada:

(9 años después:)
Ambas respuestas proporcionadas fallarían en archivos sin una nueva línea al final, esto efectivamente omitirá la última línea, no producirá errores, conduciría a un desastre (aprendido de manera difícil:).

La mejor solución concisa que encontré hasta ahora que "Simplemente funciona" (tanto en bash como en sh):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

Para obtener una discusión más detallada, consulte esta discusión de StackOverflow:¿Cómo usar "mientras se lee" (Bash) para leer la última línea de un archivo si no hay una nueva línea al final del archivo?

Cuidado:este enfoque agrega una nueva línea adicional a la última línea si ya no hay ninguna.


Linux
  1. ¿Cómo insertar texto antes de la primera línea de un archivo?

  2. ¿Cómo agregar varias líneas a un archivo?

  3. ¿Cómo contar el número de líneas en un archivo después de una coincidencia Grep?

  4. ¿Cómo uso las líneas de un archivo como argumentos de un comando?

  5. ¿Cómo leer la penúltima línea en un archivo usando Bash?

Cómo quitar líneas de un archivo usando el comando Sed

Cómo encontrar las líneas más largas en un archivo en Linux

¿Cómo puedo anteponer una cadena al comienzo de cada línea en un archivo?

Cómo obtener solo el número de líneas de un archivo

¿Cómo obtener la URL del archivo de Dropbox desde la línea de comando?

Linux:grep desde ciertas líneas hasta el final del archivo