506 votes

Rejoindre plusieurs lignes en une avec bash

Je voudrais joindre le résultat de ls -1 en une ligne et le délimiter avec tout ce que je veux.

Y at-il des commandes linux standard que je peux utiliser pour y parvenir?

796voto

Artem Points 1331

Similaire à la toute première option mais omet le délimiteur de fin

 ls -1 | paste -sd ","
 

399voto

zaf Points 12350

EDIT : Simplement " ls -m " Si vous voulez que votre délimiteur soit une virgule

Ah, le pouvoir et la simplicité!

 ls -1 | tr "\\n" ","
 

Changer la virgule " , " à ce que vous voulez.

34voto

Dennis Williamson Points 105818

Cela remplace la dernière virgule par une nouvelle ligne:

 ls -1 | tr '\n' ',' | sed 's/,$/\n/'
 

ls -m inclut des retours à la ligne au caractère de largeur d'écran (80ème par exemple).

La plupart du temps Bash (seulement ls est externe):

 files=($(ls -1))
list=${files[@]/%/,}
list=${list%*,}
 

15voto

glenn jackman Points 69748

La combinaison du paramètre IFS et de l'utilisation de "$*" peut faire ce que vous voulez. J'utilise un sous-shell pour ne pas interférer avec les $ IFS de ce shell

 (set -- *; IFS=,; echo "$*")
 

Pour capturer la sortie,

 output=$(set -- *; IFS=,; echo "$*")
 

8voto

ghostdog74 Points 86060

juste bash

 mystring=$(printf "%s|" *)
echo ${mystring%|}
 

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