Bonjour à tous,
Je suis en train d'écrire un script shell qui a pour but les actions suivantes:
Modifier les valeurs d'un champs dans un fichier.
Ex:
La ligne de commande permettra de choisir la valeur de m1 a remplacé dans le fichier
Valeur de m1: 50
Résultat:
Dans le fichier, toutes les valeurs de m1 seront donc remplacée par 50
Voici la commande que j'avais trouvé pour faire cela:
sed 's/arg1/arg2/g 'file1|>file2
Cependant ça ne fonctionne pas car si j'ai plusieurs valeur de m1 dans le fichier...toutes ne seront pas remplacée
Je sais que l'on peux faire ça avec awk, par contre je ne m'en sort pas pour écrire cela. Quelqu'un aurait-il déjà résolu ce genre de pb
Merci à tous pour votre aide.
@+
# ma technique...
Posté par NeoX . Évalué à 2.
cat file1 | sed -e s/arg1/arg2/g >file2
attention aux espaces ou caracteres speciaux dans les args
sinon garanti sur facture
[^] # Re: ma technique...
Posté par elkhy . Évalué à 1.
En fait mon souci ne se situe pas à se niveau.
Mais mon souci est le suivant:
lorsque je lance ma commande, je dis: remplacer toutes les occurences de m1 = 25 par 50 par exemple
(ce qui donne avec ta commande : cat file1 | sed -e s/arg1/arg2/g >file2). Cela marche très bien
Mais toutes les occurences de m1 ne sont pas égales à 25 dans mon fichier. Ce que je voudrai et que je n'arrive pas à faire, c'est remplacer toutes les occurences de m1, quelque soit leur valeur (25 ou autre) par 50 (dans mon exemple)
d'avance merci.
[^] # Re: ma technique...
Posté par Gyro Gearllose . Évalué à 1.
$ sed "s# m1 = .*#m1 = 25#g" file1 > file2
Explications :
Déjà, ton cat ne sert à rien, sed gère ça d'entrée de jeu....
On peut mettre n'importe quoi comme caractère pour la commande de substitution, et j'avais envie de changer....
On recherche une chaîne qui ressemble à m1 = suivie de ... peu importe, et on remplace le tout par m1 = 50.
Voilà, j'espère que ça répond à ton problème.
[^] # Re: ma technique...
Posté par NeoX . Évalué à 1.
enfin par m1 = 25 tu voulais dire ;-)
ok je chipotte, mais sinon belle explication.
j'avais hesité pour le coup de sed qui accepterait n'importe quel separateur.
Ainsi la ligne peut s'ecrire :
$ sed "s# m1 = .*#m1 = 25#g" file1 > file2
$ sed "s@m1 = .*@m1 = 25@g" file1 > file2
$ sed "s/m1 = .*/m1 = 25/g" file1 > file2
$ sed "sxm1 = .*xm1 = 25xg" file1 > file2
mais la derniere est peu lisible :-/
[^] # Re: ma technique...
Posté par elkhy . Évalué à 1.
Je chipotte aussi...lol en fait je voudrai rendre ça encore plus dynamique en faisant ceci:
$ m1 = ....
L'utilisateur saisit la valeur en ligne de commande et toutes les valeurs se changent dans le fichier.
Cela est-il possible à réaliser ?
encore merci
[^] # Re: ma technique...
Posté par Gyro Gearllose . Évalué à 1.
Quel que soit le shell utilisé, si l'utilisateur en question tape :
$ m1=75
$ sed "s#m1 = .*#m1 = $m1#g" fichier1 > fichier2
ça fait ce que tu demandes.
A partir de là, rien ne t'empêche d'écrire un script-shell qui reproduise l'ensemble des commandes.
Je te conseille de jeter un oeil aux pages de manuel de ton shell pour voir comment on procède pour demander une valeur interactivement.
Ainsi, un truc dans ce genre :
Devrait faire l'affaire.
Libre à toi d'y ajouter tous les contrôles d'erreurs dont tu pourrait avoir besoin.
Voilà, en espérant que ça aide.
[^] # Re: ma technique...
Posté par totof2000 . Évalué à 2.
NON !
sed -e s/arg1/arg2/g file1 >file2
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.