0
votes

Supprimer la nouvelle ligne de la variable Bash

Le contenu de $ var code> est séparé par un espace, donc j'ai ajouté une boucle pour sortir chaque ligne dans $ var code> séparé par une nouvelle ligne dans "$ P " code> Cependant, au début, une nouvelle ligne est également ajoutée que je ne peux pas supprimer.

echo ${p} | tr -d '\n'

S1 S2 S3


2 commentaires

Votre entrée commence-t-elle avec une nouvelle ligne ou seulement après la boucle?


Une nouvelle ligne est introduite après la boucle. Merci :).


6 Réponses :


3
votes

Honnêtement, vous surchargez ceci (et introduisant quelques bugs possibles en cours de route).

Il suffit d'utiliser tr code> pour remplacer les espaces avec des lignes neuves. P>

$ var="S1 S2 S3"
$ echo "$var" | tr ' ' '\n'
S1
S2
S3


0 commentaires

4
votes

Pour supprimer la langue nouvelle, vous pouvez utiliser la substitution de modèle xxx


0 commentaires

1
votes

Utilisez simplement echo $ var | tr '' '\ n' code> Pour remplacer les espaces par une nouvelle ligne.

Ceci fonctionne dans les cas où vous avez plusieurs espaces dans le contenu de var p>

var="S1    S2 S3"
echo $var | tr ' ' '\n'
S1
S2
S3


6 commentaires

Citez vos variables! echo "$ var"


Si vous avez plusieurs espaces dans le contenu de Var, cela ne fonctionnera pas comme prévu et vous donnera des lignes vides dans la sortie.


La sortie de OP montre des espaces simples, mais dans ce cas: sed -r 's / + / \ n / g'


Ouais, il peut y avoir plusieurs façons et cela dépend du type d'entrée et de la sortie attendue.


Ouais c'est vrai. Je n'utiliserais toujours pas la division de mots sauf si j'étais sûr à 100% $ var ne contiendrait jamais de caractères de globe. Pour référence, voir Shellcheck SC2086


Merci à tous :)



1
votes

Je préfère supprimer la ligne vide avec sed d'abord, xxx xxx


0 commentaires

1
votes

Vous pouvez supprimer une seule nouvelle ligne de tête avec $ {var # motif} code> expansion variable.

var='
S1
S2
S3'

echo "${var#$'\n'}"


0 commentaires

1
votes

L'expansion des paramètres peut remplacer chaque espace avec une nouvelle ligne, plutôt que de devoir itérer sur la séquence explicitement.

$ var="S1 S2 S3"
$ var=${var// /$'\n'}
$ echo "$var"
S1
S2
S3


0 commentaires