Remplacement chaine de caractere
repie
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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 !
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:
- Remplacement chaine de caractere
- Remplacement coco - Accueil - Réseaux sociaux
- Caractère ascii - Guide
- Coco.fr remplacement - Accueil - Réseaux sociaux
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
14 réponses
Salut,
sed '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichierRajoute l'option "-i" pour une modification du fichier original :
sed -i.bak '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier';-))
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.....)
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.....)
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).
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).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :/
cat fichier1 | sed 's/cible..../cible = 2/g' > fichier2
Apres je crois que je suis condamné à faire un \mv :/
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 :
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;-))
T'es obligé de le faire avec sed?
Sinon il y a aussi Perl
lami20j
Sinon il y a aussi Perl
perl -pi.orig -e 's/cible[*]{4}/cible = 2/g' fichier--
lami20j
Non il n'est pas obligé... y'a "ed" aussi ;-)))
Perl c'est pour les faignants ;-DDD
Edit : Tiens faignasse, va voir là !
Perl c'est pour les faignants ;-DDD
Edit : Tiens faignasse, va voir là !
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.
Pour la version de sed je sais pas.