164 votes

En Bash, comment ajouter une chaîne après chaque ligne d'un fichier ?

Comment ajouter une chaîne de caractères après chaque ligne d'un fichier en utilisant bash ? Peut-on le faire en utilisant la commande sed, si oui comment ?

249voto

Tom DeGisi Points 421

Si votre sed permet l'édition en place via le -i paramètre :

sed -e 's/$/string after each line/' -i filename

Sinon, vous devez créer un fichier temporaire :

typeset TMP_FILE=$( mktemp )

touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename

0 votes

Pourquoi est-ce que vous touch le fichier temporaire ? Et je ferais en sorte que le sed conditionnée par le succès de la commande cp ou l'original pourrait être perdu.

0 votes

J'ai touché le fichier pour réserver rapidement le nom temporaire. Ce n'est peut-être pas nécessaire. Je pense que vous avez raison de rendre la commande sed conditionnelle au succès du cp. Pourquoi ne pas modifier le code pour faire cette correction. Cela ne me dérange pas du tout ! Bien à vous, Tom

0 votes

Et si on ajoutait une chaîne avant une ligne ?

33voto

欢乐的Xiaox Points 31

Je préfère echo . en utilisant du bash pur :

cat file | while read line; do echo ${line}$string; done

26voto

Optimus Prime Points 3070

Je préfère utiliser awk . S'il n'y a qu'une seule colonne, utilisez $0 sinon, remplacez-la par la dernière colonne.

Un moyen,

awk '{print $0, "string to append after each line"}' file > new_file

ou ceci,

awk '$0=$0"string to append after each line"' file > new_file

10voto

martin clayton Points 41306

Si vous l'avez, le lam (stratifié) peut le faire, par exemple :

$ lam filename -s "string after each line"

8voto

agc Points 4529
  1. Pure shell POSIX y sponge :

    suffix=foobar
    while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file | 
    sponge file
  2. xargs y printf :

    suffix=foobar
    xargs -L 1 printf "%s${suffix}\n" < file | sponge file
  3. Utilisation de join :

    suffix=foobar
    join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
  4. Outils Shell utilisant paste , yes , head & wc :

    suffix=foobar
    paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file

    Notez que paste insère un Onglet char avant $suffix .

Bien sûr. sponge peut être remplacé par un fichier temporaire, après quoi mv par-dessus le nom du fichier original, comme avec d'autres réponses...

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