GNU/Linux >> Tutoriales Linux >  >> Linux

En un shell de Linux, ¿cómo puedo procesar cada línea de una cadena de varias líneas?

Simplemente pase su cadena a su función:

function my_function
{
    while test $# -gt 0
    do
        echo "do something with $1"
        shift
    done
}
my_string="cat
dog
bird"
my_function $my_string

te da:

do something with cat
do something with dog
do something with bird

Y si realmente le importa que se tomen otros espacios en blanco como separadores de argumentos, primero configure su IFS :

IFS="
"
my_string="cat and kittens
dog
bird"
my_function $my_string

para obtener:

do something with cat and kittens
do something with dog
do something with bird

No olvides unset IFS después de eso.


Use esto (es un ciclo de lectura de cada línea del archivo file )

cat file | while read -r a; do echo $a; done

donde el echo $a es lo que quieras hacer con la línea actual.

ACTUALIZACIÓN:de los comentaristas (¡gracias!)

Si no tiene un archivo con varias líneas, pero tiene una variable con varias líneas, use

echo "$variable" | while read -r a; do echo $a; done

ACTUALIZACIÓN2:"read -r " se recomienda deshabilitar la barra invertida (\ ) interpretación de caracteres (verifique los comentarios de mtraceur; compatible con la mayoría de los shells). Está documentado en POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html

De forma predeterminada, a menos que se especifique la opción -r, <backslash> actuará como un personaje de escape. .. Se admite la siguiente opción:-r - No tratar un <backslash> personaje de alguna manera especial. Considere cada uno como parte de la línea de entrada.


Linux
  1. Anteponer y agregar una cadena a cada elemento de $* en Shell?

  2. Cómo cambiar Shell en Linux

  3. En Bash, ¿cómo agrego una cadena después de cada línea en un archivo?

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

  5. ¿Cómo puedo hacer una división con variables en un shell de Linux?

Cómo matar un proceso en Linux

Cómo reemplazar una cadena en varios archivos en la línea de comando de Linux

cómo restringir la longitud de la cadena presente en una línea usando Linux

¿Cómo insertar una nueva línea en el script de shell de Linux?

¿Cómo invertir una lista de palabras en una cadena de shell?

¿Cómo puedo copiar una carpeta desde la línea de comandos de Linux?