Remplacement chaine de caractere

Fermé
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007 - 17 sept. 2007 à 11:40
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 17 sept. 2007 à 16:31
Bonjour,
je cherche une commande pour rechercher puis remplacer une chaine de caractere dans un fichier.
J'ai deja un peu essayé sed mais si j'ai bien compris ça ne modifie pas directement le fichier.
Ed a l'air de le faire mais je n'ai pas réussi à l'utiliser.
De plus j'aurais besoin de quelques 'subtilitées'.
- Par exemple j'aimerais pouvoir remplacer toute chaine de la forme 'cible****' par 'cible = 2'
ceci afin d'écraser la valeur attirbuée et 'cible' ne servant qu'à repérer la variable.
- Et aussi rajouter un filtre sur le nom de fichier à modifier.

Voilou, grand merci d'avance !
A voir également:

14 réponses

ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
17 sept. 2007 à 11:44
Bonjour,

Tu peux essayer avec la commande awk. (pour plus de renseignement voir GoOgle).
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 12:20
Salut,
sed  '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier
Rajoute l'option "-i" pour une modification du fichier original :
sed -i.bak '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier'
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 sept. 2007 à 12:22
Salut,

J'ai deja un peu essayé sed mais si j'ai bien compris ça ne modifie pas directement le fichier.
Non, tu n'as pas bien compris :-)

Il faut utiliser l'option -i ou -i.extension (pour sauvegarder l'original - au lieu d'extension tu peux utiliser n'importe quel suffixe, ex : bak, save, orig, etc.....)
0
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 13:44
merci pour ces réponses, je crois que c'est l'esprit de ce que je cherche.
Malheureusement je n'ai pas réussi à l'appliquer.
D'une part l'option -i n'est pas reconnue dans mon environnement :/
D'autre part si je fais :
fichier1 contient : cible = 8
sed '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier1 < fichier2
fichier2 reste identique à fichier1 (et il ne bronche pas quand j execute la commande).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 14:08
Ah j'ai réussi je crois bien :

cat fichier1 | sed 's/cible..../cible = 2/g' > fichier2

Apres je crois que je suis condamné à faire un \mv :/
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:11
Quelle version de sed ?

D'autre part l'exemple que je t'ai donné était pour un motif correspondant à "cible****", dans ton cas particulier il faut simplement mettre :
sed 's/cible = 8/cible = 2/' fichier1 > fichier2
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 sept. 2007 à 14:13
T'es obligé de le faire avec sed?
Sinon il y a aussi Perl
perl -pi.orig -e 's/cible[*]{4}/cible = 2/g' fichier
--
lami20j
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:24
Non il n'est pas obligé... y'a "ed" aussi ;-)))

Perl c'est pour les faignants ;-DDD

Edit : Tiens faignasse, va voir !
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
17 sept. 2007 à 15:17
0
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 14:36
L'idée c'est d'écraser la valeur de cible. Ce qui fait office de 'n'importe quel caractere' c'est '.' (par défaut j'ai mis *, désolé pour l'ambigüité)

Pour la version de sed je sais pas.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:40
sed --version
;-))
0
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 15:33
La commande marche pas :/ désolé
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 15:40
sed -v

0
repie Messages postés 6 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 16:21
non plus : illegal option
décidément ..
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 sept. 2007 à 16:29
Affiche
sed -h
ou
sed --help
quelque soit le résultat--
lami20j
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 16:31
sed
tout court alors et t'auras droit à toutes les options ;-))
0