3 votes

Chat avec une nouvelle ligne

Le contenu de mon fichier d'entrée est le suivant :

bienvenue à

bienvenue1

bienvenue2

Mon script est :

for groupline in `cat file`
do
        echo $groupline;
done

J'ai obtenu le résultat suivant :

welcome
welcome1
welcome2 

Pourquoi n'imprime-t-il pas la ligne vide ?

5voto

ghostdog74 Points 86060

Vous devez définir IFS à la nouvelle ligne \n

IFS=$"\n"
for groupline in $(cat file)
do
        echo "$groupline";
done

Ou mettez des guillemets. Voir aquí pour une explication

for groupline in "$(cat file)"
do
        echo "$groupline";
done

sans se mêler de l'IFS, la "bonne" façon est d'utiliser la boucle de lecture while

while read -r line
do
 echo "$line"
done <"file"

1voto

Parce que tu t'y prends mal. Vous voulez while no for et vous voulez read pas cat :

while read groupline
do
  echo "$groupline"
done < file

0voto

Jiang Xin Points 21

La solution fournie par ghostdog74 est utile, mais a un défaut.

IFS ne peut pas utiliser de guillemets doubles (du moins sous Mac OS X), mais peut utiliser des guillemets simples comme :

IFS=$'\n'

C'est joli mais pas compatible avec le tableau de bord, peut-être que ceci est mieux :

IFS='
'

La ligne vide sera mangée dans le programme suivant :

IFS='
'
for line in $(cat file)
do
        echo "$line"
done

Mais vous ne pouvez pas ajouter de guillemets autour de $(cat file) il traitera le fichier entier comme une seule chaîne.

for line in "$(cat file)"

Si vous souhaitez qu'une ligne vide soit également traitée, utilisez la méthode suivante

while read line
do
    echo "$line"
done < file

0voto

user3399273 Points 129

Utilisation de IFS=$"\n" y var=$(cat text.txt) supprime tous les caractères "n" de la sortie echo $var

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X