Ajouter une ligne avec sed [Résolu/Fermé]

Signaler
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
-
 Eric -
Bonjour,

Je reviens vers vous car je suis très content de mon dernier poste.

J'ai toujours du mal avec la commande sed.

Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
la ligne de mon choix.

la commande que j'utilise : sed '${num_ligne}a! $addtext' fichier.txt

mais sans succés.

Merci de votre retour.

19 réponses

Messages postés
1
Date d'inscription
jeudi 1 mars 2012
Statut
Membre
Dernière intervention
1 mars 2012
1
bonjour,
je sais que ce post est vieux mais pour ceux qui cherche encore une solution bien voici ce que je propose.

Pour insérer(i), ajouter(a), echanger(c) une ligne avec la commande sed

ex: ajouter en fin de fichier
sed -e '$a\texte que vous voulez ' fichier

ex: ajouter après une ligne "ajouter ce texte après ligne "2"
sed -e '2a\texte que vous voulez ' fichier

avec l'option (i) , positionne votre texte en ligne 2 et decale le reste du texte.

J'espère que ça aidera quelqu'un
+++
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
43
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
21 juillet 2008

Bonjour!
je viens de trouver ceci, j'espere que tu trouvera la reponce dedans ^^!
bonne journée
http://www.commentcamarche.net/forum/affich 1982836 commande sed
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Merci de ta réponse mais la solution donné ne fonctionne pas sur mon serveur,
sed '4i\ toto' -> sed: command garbled: 4i\ toto

J'ai lu le tuto sur le site mais les exemples ne sont pas tellement parlant enfin pour moi.

Merci
Messages postés
43
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
21 juillet 2008

toto c'est un example non?
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Oui toto c'est bien pour un exemple, j'ai toujours le problème sed: command garbled
je suis sous solaris 9.

Merci
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 778
Essaye comme ça alors :
num=4; sed "$num a\
Mais je sens que ça va venir
" fichier.txt
;-))
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Toujours même message d'erreur,

j'ai essayer avec i mais idem, je devrait peut-être utilisé un awk ?

Merci
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 491
Salut,

ou avec perl ;-) (je n'ai pas testé)
perl -pi.orig -e 'print "Mais je sens que ça va venir\n" if $. == 3"' fichier.txt
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Alors je ne connais pas perle, mais bon j'ai essayer et ça ma donné :


String found where operator expected at -e line 1, at end of line
(Missing semicolon on previous line?)
Can't find string terminator '"' anywhere before EOF at -e line 1.


Merci
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 491
Oups, j'ai rajouté une guillemets en plus ;-)
perl -pi.orig -e 'print "Mais je sens que ça va venir\n" if $. == 3' fichier.txt
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Ça marche mais c'est pas stable, je m'explique quand je le lance telle que tu me la donner ca marche cependant quand je l'adapte a mon script en rajouter des variables il fait des doublons dans mon fichiers notamment pour écrire a la dernière ligne.

mon utilisation : variable remplacer.

perl -pi.tmp -e 'print "toto\n" if $. == 11' fichier.txt

fichier.txt
# Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
# Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
# Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
# Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
# jours fériés), les dates sont au format JJ/MM/AAAA.
# jours fériés), les dates sont au format JJ/MM/AAAA.
# jours fériés), les dates sont au format JJ/MM/AAAA.
Apres adaptation
# jours fériés), les dates sont au format JJ/MM/AAAA.
14/07/2006
14/07/2006
Mais je sens que ça va venir -> test via la commande non adapter



Merci
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Quelqu'un aurrait une autre idée ou syntax pour sed ?

Merci
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 778
Essaye ça :
num=4; sed "$num s/.*/&\nMais je sens que ça va venir/" fichier.txt
;-))
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Je pense qu'on est pas loin, la commande fonctionne mais ne fait pas de retour a la ligne :

num=4; sed "$num s/.*/&\n Mais je sens que ça va venir/" fichier.txt

# Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
# jours fériés), les dates sont au format JJ/MM/AAAA.
14/07/2006
17/07/2006n Mais je sens que ça va venir
18/07/2006
15/08/2006

si on pouvais inséré un retour a la ligne ca serait parfait.

Merci
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 778
Rajoute un "anti-slash" :
sed "$num s/.*/&\\n Mais je sens que ça va venir/" 
;-))
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Bonjour,

J'ai bien essayé mais rien a faire il ne fait de retour a la ligne, j'ai essayer aussi les '' "" sans succès.

Merci
Messages postés
66
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
7 octobre 2010
5
Bonjour,

tan pis je me suis rabattu sur la redirection du texte dans mon fichier je fait donc une insertion a la fin du fichier,

echo $text >> $mon_fichier

merci a tous.
Moi cela m'a aidé, merci !
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 778
Salut,
jp@MDK:~/tmpfs ssh$ cat fichier.txt
Bonjour,

Je reviens vers vous car je suis très content de mon dernier poste.
J'ai toujours du mal avec la commande sed.
Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
la ligne de mon choix.

jp@MDK:~/tmpfs ssh$ num=4; sed "$num a\Mais je sens que ça va venir" fichier.txt
Bonjour,

Je reviens vers vous car je suis très content de mon dernier poste.
J'ai toujours du mal avec la commande sed.
Mais je sens que ça va venir
Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
la ligne de mon choix.

jp@MDK:~/tmpfs ssh$
;-))