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

Signaler
Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
-
Messages postés
101
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
3 janvier 2014
-
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

4 réponses

Messages postés
35619
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2020
5 460
$ 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

3
Merci

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

CCM 61022 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
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 ^^
Messages postés
35619
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2020
5 460
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 :
https://www.commentcamarche.net/faq/sed-478
et notamment :
https://www.commentcamarche.net/faq/9536-sed-introduction-a-sed-part-i
https://www.commentcamarche.net/faq/9559-sed-introduction-a-sed-part-ii
https://www.commentcamarche.net/faq/9558-sed-introduction-a-sed-part-iii
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
35619
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
21 septembre 2020
5 460
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
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 ^^