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 22/11/2016, à 21: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, à 16:13)

Hors ligne

#2 Le 22/11/2016, à 21: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, à 22:08)

Hors ligne

#3 Le 23/11/2016, à 07: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 smile

Effectivement, ça pique les yeux "a manger". C'est corrigé. Honte à moi.

Bonne journée.

Hors ligne

#4 Le 23/11/2016, à 10: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, à 10: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, à 11: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, à 11:39)

Hors ligne

#7 Le 23/11/2016, à 13: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, à 13:38)

Hors ligne

#8 Le 23/11/2016, à 16: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 smile

Hors ligne