Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad

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 ' smile
Merci encore smile