GNU/Linux >> Linux Esercitazione >  >> Linux

In una shell Linux come posso elaborare ogni riga di una stringa multilinea?

Basta passare la stringa alla funzione:

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

ti dà:

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

E se ti interessa davvero che altri spazi bianchi vengano presi come separatori di argomenti, prima imposta il tuo IFS :

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

per ottenere:

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

Non dimenticare di unset IFS dopodiché.


Usa questo (è un ciclo di lettura di ogni riga dal file file )

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

dove echo $a è quello che vuoi fare con la linea corrente.

AGGIORNAMENTO:dai commentatori (grazie!)

Se non hai un file con più righe, ma hai una variabile con più righe, usa

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

UPDATE2:"read -r " si consiglia di disabilitare la barra rovesciata (\ ) interpretazione dei caratteri (controlla i commenti di mtraceur; supportato nella maggior parte delle shell). È documentato in POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html

Per impostazione predefinita, a meno che non sia specificata l'opzione -r, <backslash> fungerà da carattere di fuga. .. È supportata la seguente opzione:-r - Non trattare un <backslash> carattere in alcun modo speciale. Considera ciascuno come parte della riga di input.


Linux
  1. Anteporre e aggiungere una stringa a ogni elemento di $* in Shell?

  2. Come fare eco a una nuova riga negli script di Bash Shell

  3. Come utilizzare le funzioni della shell della riga di comando in Linux

  4. Come convertire i caratteri esadecimali in ASCII nella shell di Linux?

  5. Come convertire l'output della shell di Linux in HTML?

Come uccidere un processo in Linux

Come posso anteporre una stringa all'inizio di ogni riga in un file?

Come posso eseguire la divisione con le variabili in una shell Linux?

come limitare la lunghezza della stringa presente in una riga usando Linux

Come inserire una nuova riga nello script della shell di Linux?

Come invertire un elenco di parole in una stringa di shell?