Remplacer une ligne dans un fichier avec SED
Résolu
Wilfou
Messages postés
101
Date d'inscription
Statut
Membre
Dernière intervention
-
Wilfou Messages postés 101 Date d'inscription Statut Membre Dernière intervention -
Wilfou Messages postés 101 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Sed remplacer une ligne
- Partager photos en ligne - Guide
- Remplacer disque dur par ssd - Guide
- Mètre en ligne - Guide
- Remplacer word - Guide
- Aller à la ligne excel - Guide
4 réponses
$ 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
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 ^^
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 ^^
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://forums.commentcamarche.net/forum/affich-37620084-sed-introduction-a-sed-part-i
https://forums.commentcamarche.net/forum/affich-37620020-sed-introduction-a-sed-part-ii
https://forums.commentcamarche.net/forum/affich-37620122-sed-introduction-a-sed-part-iii
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://forums.commentcamarche.net/forum/affich-37620084-sed-introduction-a-sed-part-i
https://forums.commentcamarche.net/forum/affich-37620020-sed-introduction-a-sed-part-ii
https://forums.commentcamarche.net/forum/affich-37620122-sed-introduction-a-sed-part-iii
Alors il y a le fichier que je veux éditer : conf.php
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 :
Voila ^^
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 ^^