GNU/Linux >> Tutoriels Linux >  >> Linux

Dans un shell Linux, comment puis-je traiter chaque ligne d'une chaîne multiligne ?

Passez simplement votre chaîne à votre fonction :

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

vous donne :

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

Et si vous tenez vraiment à ce que d'autres espaces blancs soient pris comme séparateurs d'arguments, définissez d'abord votre IFS :

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

pour obtenir :

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

N'oubliez pas de unset IFS après ça.


Utilisez ceci (c'est une boucle de lecture de chaque ligne du fichier file )

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

où le echo $a est ce que vous voulez faire avec la ligne actuelle.

MISE À JOUR :des commentateurs (merci !)

Si vous n'avez pas de fichier avec plusieurs lignes, mais que vous avez une variable avec plusieurs lignes, utilisez

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

MISE À JOUR2 :"read -r " est recommandé de désactiver la barre oblique inverse (\ ) interprétation des caractères (vérifiez les commentaires de mtraceur ; pris en charge dans la plupart des shells). Il est documenté dans POSIX 1003.1-2008 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html

Par défaut, sauf si l'option -r est spécifiée, <backslash> agira comme un caractère d'échappement. .. L'option suivante est supportée :-r - Ne pas traiter un <backslash> caractère d'une manière particulière. Considérez chacun comme faisant partie de la ligne d'entrée.


Linux
  1. Comment faire écho à une nouvelle ligne dans les scripts shell bash

  2. Comment convertir les caractères hexadécimaux en caractères ASCII dans le shell Linux ?

  3. Comment convertir la sortie du shell de Linux en HTML ?

  4. Comment puis-je savoir sous Linux quel processus a envoyé un signal à mon processus

  5. comment restreindre la longueur de la chaîne présente dans une ligne en utilisant Linux

Comment tuer un processus sous Linux

Comment remplacer une chaîne dans plusieurs fichiers en ligne de commande Linux

Comment puis-je ajouter une chaîne au début de chaque ligne dans un fichier ?

Comment puis-je faire une division avec des variables dans un shell Linux ?

Comment puis-je copier un dossier à partir de la ligne de commande Linux ?

Le processus init peut-il être un script shell sous Linux ?