#1 Le 22/11/2016, à 20:34
- crc3
[Résolu] Script en bash : Changer un mot dans un fichier
Bonjour à tous,
Je recherche une méthode en 1 seule ligne de commande ou en bash pour modifier un mot dans un fichier en se basant sur un fichier (CSV, txt ou autre) qui comporte le premier mot de la ligne à modifier. Voici un exemple :
Fans mon fichier csv, j'ai cette liste :
francis
marie
robert
Dans le fichier dans lequel je voudrai remplacer le mot non par oui:
jean a mangé une pomme, non
marie a mangé une pomme, non
robert a mangé une pomme, non
gerald a mangé une pomme, non
francis a mangé une pomme, non
Je ne sais pas si je me suis bien exprimé mais dans l'affirmatif, toute aide serait la bienvenue.
Merci à tous.
Bonne soirée.
Dernière modification par crc3 (Le 23/11/2016, à 15:13)
Hors ligne
#2 Le 22/11/2016, à 20:52
- pingouinux
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Bonsoir,
Par exemple
$ cat liste
francis
marie
robert
$ cat fichier
jean a manger une pomme, non
marie a manger une pomme, non
robert a manger une pomme, non
gerald a manger une pomme, non
francis a manger une pomme, non
while read nom; do sed -ri "s/^($nom .*, )non/\1oui/" fichier; done <liste
$ cat fichier
jean a manger une pomme, non
marie a manger une pomme, oui
robert a manger une pomme, oui
gerald a manger une pomme, non
francis a manger une pomme, oui
Ajouté : Ou bien
while read nom; do sed -i "/^$nom /s/ non$/ oui/" fichier; done <liste
Pour info, c'est
jean a mangé une pomme
et non
jean a manger une pomme
Dernière modification par pingouinux (Le 22/11/2016, à 21:08)
Hors ligne
#3 Le 23/11/2016, à 06:44
- crc3
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Bonjour,
Un grand merci pingouinux !
Je testerai ta solution tout à l'heure et je te ferai un retour
Effectivement, ça pique les yeux "a manger". C'est corrigé. Honte à moi.
Bonne journée.
Hors ligne
#4 Le 23/11/2016, à 09:44
- crc3
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Re-bonjour,
Pour mes tests, j'ai créé les fichiers liste et fichier et j'ai lancé les 2 commandes mais ça ne fonctionne pas. Les valeurs restent à "non"
Aurai-je loupé ou mal fait quelque chose ?
Merci pour l'aide.
Bonne journée.
Hors ligne
#5 Le 23/11/2016, à 09:51
- pingouinux
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Montre les deux fichiers, ainsi que la commande (copier-coller), et les messages d'erreur éventuels.
Hors ligne
#6 Le 23/11/2016, à 10:38
- crc3
Re : [Résolu] Script en bash : Changer un mot dans un fichier
J'ai repris ton exemple. J'ai créé un fichier qui s'appelle "liste" et qui contient:
francis
marie
robert
et un autre que j'ai nommé "fichier" et qui contient:
jean a mangé une pomme, non
marie a mangé une pomme, non
robert a mangé une pomme, non
gerald a mangé une pomme, non
francis a mangé une pomme, non
Ensuite, je lance la commande:
while read nom; do sed -ri "s/^($nom .*, )non/\1oui/" fichier; done <liste
Et un cat fichier me donne :
$ cat fichier
jean a manger une pomme, non
marie a manger une pomme, non
robert a manger une pomme, non
gerald a manger une pomme, non
francis a manger une pomme, non
Merci pour ton aide.
Dernière modification par crc3 (Le 23/11/2016, à 10:39)
Hors ligne
#7 Le 23/11/2016, à 12:36
- pingouinux
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Je ne comprends pas. Ça marche chez moi, en bash et sh.
Ma seconde commande
while read nom; do sed -i "/^$nom /s/ non$/ oui/" fichier; done <liste
est préférable (plus succincte), mais les deux devraient faire ce que tu veux.
Ajouté : Tu as dû te tromper de fichier, car la faute d'orthographe est revenue…
Dernière modification par pingouinux (Le 23/11/2016, à 12:38)
Hors ligne
#8 Le 23/11/2016, à 15:12
- crc3
Re : [Résolu] Script en bash : Changer un mot dans un fichier
Merci beaucoup, cela fonctionne !
Mon erreur était dû à un problème de formatage...
Merci à toi et bonne journée
Hors ligne