Remplacer une ligne dans un fichier avec SED [Résolu/Fermé]

Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
- - Dernière réponse : Wilfou
Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
- 26 août 2013 à 10:28
Bonjour,

En parcourant le web, j'ai trouver qu'on pouvait modifier le contenu d'un fichier à l'aide de SED.

Dans mon cas, j'aimerais d'abord rechercher une ligne spécifique à l'aide du début de la ligne ("$variable_origine=" par exemple) et la remplacer par une autre ligne ("$variable_remplace=contenu").

Pouvez-vous m'aider à créer cette ligne que je pourrais ajouter dans mon petit script ? je m'y retrouve plus avec les ^, les \, les /, etc. (une explication ou même un lien vers un tuto que vous trouvez assez simple à comprendre me convient =D)

Merci

Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
37442
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 novembre 2019
4212
3
Merci
$ cat plop 
blablabla
blablabla
$une_variable=un_contenu
blablabla
blablabla

$ sed -i.bak 's/^\$une_variable=.*/\$une_autre_variable=un_autre_contenu/' plop

$ cat plop 
blablabla
blablabla
$une_autre_variable=un_autre_contenu
blablabla
blablabla

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 71346 internautes nous ont dit merci ce mois-ci

Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
8
2
Merci
C'est si simple ?

donc si j'ai bien compris :

le s c'est substitution
le \ c'est pour pouvoir mettre un caractère spécial dans l'expression
le / c'est le délimiteur à l'intérieur de l'expression
le ' c'est le délimiteur de l'expression

maintenant à quoi servent le ^ et le .*

Merci de ton aide en tout cas, je vais essayé ça ce soir ^^
zipe31
Messages postés
37442
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 novembre 2019
4212 -
le s c'est substitution
le \ c'est pour pouvoir mettre un caractère spécial dans l'expression
le / c'est le délimiteur à l'intérieur de l'expression
le ' c'est le délimiteur de l'expression


Exact pour tout.

maintenant à quoi servent le ^ et le .*

Le " ^" correspond à une chaîne nulle en début de ligne, autrement dit ce qui se trouve après l'accent circonflexe doit apparaître en début de ligne.

Le "." désigne n'importe quel caractère et le "*" correspond à une séquence de zéro, une ou plusieurs occurrence(s) de l'expression précédente (ou caractère). Dans ton cas ça englobe tout ce qui suit le signe égal dans "$une_variable=un_contenu".

Pour plus de renseignements sur sed voir dans la FAQ :
http://www.commentcamarche.net/faq/sed-478
et notamment :
http://www.commentcamarche.net/faq/9536-sed-introduction-a-sed-part-i
http://www.commentcamarche.net/faq/9559-sed-introduction-a-sed-part-ii
http://www.commentcamarche.net/faq/9558-sed-introduction-a-sed-part-iii
Wilfou
Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
8 -
et bien merci beaucoup ! =)
Messages postés
37442
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 novembre 2019
4212
1
Merci
Salut,

Poste un exemple concret AVANT => APRÈS de ce que tu veux exactement.
Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
8
0
Merci
Alors il y a le fichier que je veux éditer : conf.php
blablabla
blablabla
$une_variable=un_contenu
blablabla
blablabla

Et il y a mon petit script : script.sh

Mon petit script.sh, quand je l'exécute, doit remplacer la ligne avec la variable qui est dans conf.php.

Dans ma petite tête, voila comment je me le représente :

1. j'exécute le script.sh
2. il rentre dans le fichier conf.php
3. le script parcours conf.php jusqu'à trouver la ligne avec la variable uniquement à l'aide de "$une_variable=" (car le contenu de la variable peut être tout et n'importe quoi)
4. le script remplace la ligne qu'il a trouvé par la ligne suivante : "$une_autre_variable=un_autre_contenu"
5. le script sort du fichier

Donc après cette exécution, voila le fichier conf.php final :
blablabla
blablabla
$une_autre_variable=un_autre_contenu
blablabla
blablabla


Voila ^^