Bonjour à tous
J'aimerais écrire un script qui insère trois (3) lignes supplémentaires après chaque ligne dans un fichier.
Exemple: le fichier initial peut ressembler à ceci
ligne1………………..
ligne2………………..
ligne3………………..
ligne4………………..
ligne5………………..
etc.
à la fin j'aimerais avoir:
ligne1………………..
ligne_supplémentaire_1
ligne_supplémentaire_2
ligne_supplémentaire_3
ligne2………………..
ligne_supplémentaire_1
ligne_supplémentaire_2
ligne_supplémentaire_3
ligne3………………..
ligne_supplémentaire_1
ligne_supplémentaire_2
ligne_supplémentaire_3
ligne4………………..
ligne_supplémentaire_1
ligne_supplémentaire_2
ligne_supplémentaire_3
ligne5………………..
ligne_supplémentaire_1
ligne_supplémentaire_2
ligne_supplémentaire_3
etc.
Un autre détail, les trois lignes que j’insère sont statiques (les mêmes dans tout le fichier).
Merci d'avance pour votre aide
# Avec sed
Posté par Pnchbllz . Évalué à 1. Dernière modification le 07 février 2017 à 10:26.
Une manière de le faire avec for et sed
for i in {1,2,3,4,5};do sed -i "/ligne$i.../aligne_supplémentaire_1\nligne_supplémentaire_2\nligne_supplémentaire_3" ligne;done
[^] # Re: Avec sed
Posté par benoar . Évalué à 2.
Et si tu veux faire l'ajout pour chaque ligne indistinctement de ce qu'elle contient (de ce que je comprends de la question), il suffit de laisser uniquement le "a…", c-à-d :
# avec echo
Posté par NeoX . Évalué à 3. Dernière modification le 07 février 2017 à 10:31.
[^] # Re: avec echo
Posté par Michaël (site web personnel) . Évalué à 5. Dernière modification le 07 février 2017 à 10:53.
Trois remarques:
Cela évite des mauvaises surprises, si par exemple "${line}" commence par
--
ou contient des séquences d'échappement qui, selon le shell utilisé, pourraient être interprétées.(À la différence de la fonction C, le programme printf applique périodiquement le format pour épuiser ses arguments.)
Que c'est compliqué! On peut écrire
[^] # Re: avec echo
Posté par NeoX . Évalué à 2.
va pour le print plutot que le "echo"
mais selon le niveau de la personne, le echo reste plus simple à comprendre.
quand à l'echappement de caractere, etc, oui evidemment il faut y penser et "${line}" est toujours mieux que $line
enfin pour ma syntaxe qui se veut pedagogie plus qu'optimale
aujourd'hui il veut lire un fichier
cat le_fichier
demain il veut faire un truc similaire à partir de la liste des fichiers contenu dans un dossier, ou une liste de dossier, ou la sortie d'une commande lambda
bah il remplace juste le
cat fichier_origine
parcommande lambda
[^] # Re: avec echo
Posté par Michaël (site web personnel) . Évalué à 3.
C'est triste ce que tu penses du niveau des débutants. :)
Blague à part, la multiplicité des point de vue ne peut pas nuire à l'apprentissage, et puis on ne sait pas d'où vient l'OP: il peut très bien être débutant en shell mais un programmeur chevronné avec d'autres outils, il n'y a donc pas de raison de cacher ces détails (un tout petit peu) plus délicats!
[^] # Re: avec echo
Posté par Marotte ⛧ . Évalué à 2.
Quels shells ?
Sous bash (qui utilise coreutil) le manuel ne spécifie pas de différence de comportement (la page info de echo indique que '--' n’est pas interprété spécialement, c’est tout). Il me semble que les deux commandes font appel aux mêmes fonctions de plus bas niveau avec un comportement plutôt homogène.
?
Toujours est-il que ça reste une très bonne idée de passer à printf le plus tôt possible, même pour un débutant, car la nécessité d’utiliser le formatage va vite venir.
[^] # Re: avec echo
Posté par Michaël (site web personnel) . Évalué à 4.
Comme je suis paresseux, je colle juste une référence vers la réponse très détaillée de Stéphane Chazelas à la question “Why is printf better than echo?" (en anglais donc):
http://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo
[^] # Re: avec echo
Posté par Marotte ⛧ . Évalué à 2.
Merci. Très intéressant.
# Merci
Posté par OB.ph . Évalué à 2.
Merci beaucoup pour toutes les réponses apportées, je suis très satisfait.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.