#1 Le 24/11/2007, à 13:46
- jerepain
Ecrire dans un fichier à la fin d'une ligne
Bonjour,
Après avoir fouillé de fond en comble les pages de man sur la commande "sed", j'ai rien trouvé sur comment ajouter un mot à la fin d'une ligne dans un fichier.
Dans mon fichier j'ai :
gilbert: test test1 test2
marlyse:
J'aimerais ajouter "test3" après "test2". C'est possible avec "sed" ou ">>" ?
#2 Le 24/11/2007, à 14:01
- abetsic
Re : Ecrire dans un fichier à la fin d'une ligne
Bonjour,
ceci devrait faire l'affaire :
sed '/gilbert/s/^\(.*\)$/\1 test3/'
explication :
/gilbert/ : cherche la ligne contenant "gilbert"
s/^\(.*\)$/\1 test3/ : remplace dans la ligne trouvée tout (.*) et le mémorise dans \1 par ce qui a été mémorisée suivi de test3.
Dernière modification par abetsic (Le 24/11/2007, à 14:02)
Hors ligne
#3 Le 24/11/2007, à 14:05
- chcamier
Re : Ecrire dans un fichier à la fin d'une ligne
Bonjour,
Désolé, mais l'utilisation de ">>" n'a pour fonction que l'ajout de données à la fin d'un fichier (append).
Si le fichier contient (je reprends l'exemple)
gilbert: test test1 test2
marlyse:
La commande
$ echo test3 >> fichier
Donnera le résultat suivant :
gilbert: test test1 test2
marlyse:
test3
Donc, pour ajouter "test3" à la ligne "gilbert: test test1 test2", il faut procéder en deux temps :
1 - Effectuer la modification avec SED en sauvegardant le résultat dans un fichier temporaire
2 - remplacer le fichier original avec le fichier temporaire.
Ce qui donne, dans notre cas :
$ sed '/gilbert/s/^\(.*\)$/\1 test3/' fichier > fichier_temporaire
$ cp fichier_temporaire fichier
Cordialement
CC
Hors ligne
#4 Le 24/11/2007, à 14:16
- Alain.g
Re : Ecrire dans un fichier à la fin d'une ligne
Ce n'est pas la peine de mémoriser la ligne. On peut très bien faire : 's/$/ test3/'
sed '/^gilbert:/s/$/ test3/'
Avec l'option -i pour éditer directement le fichier
Le ^ devant gilbert, c'est pour ne sélectionner que les ligne commençant par "gilbert:"
Dernière modification par Alain.g (Le 24/11/2007, à 14:17)
Xubuntu Karmic !
Hors ligne
#5 Le 24/11/2007, à 15:10
- jerepain
Re : Ecrire dans un fichier à la fin d'une ligne
Merci beaucoup, ça fonctionne en dehors du script, mais dans le script ça ne maarche plus
sed -i '/^$login:/s/$/ $p/' partage
Mon fichier s'apelle "partage"; et "$login" équivaut à "gilbert". $p est le nom de mon fichier.
J'ai essayé en mettant des echo, ça ne fonctionne toujours pas.
Et une question : Dans sed '/^gilbert:/s/$/ test3/' -->A quoi servent les /s/$/ ?
Merci.
#6 Le 24/11/2007, à 15:13
- jerepain
Re : Ecrire dans un fichier à la fin d'une ligne
C'est bon ça fonctionne !Suffisait de mettre des " au lieu des '
Merci encore