Utilisation de sed avec #
Résolu/Fermé
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
-
Modifié par Lapourax le 26/06/2013 à 11:07
Lapourax Messages postés 3006 Date d'inscription vendredi 15 mars 2013 Statut Contributeur Dernière intervention 17 février 2023 - 26 juin 2013 à 15:05
Lapourax Messages postés 3006 Date d'inscription vendredi 15 mars 2013 Statut Contributeur Dernière intervention 17 février 2023 - 26 juin 2013 à 15:05
A voir également:
- Utilisation de sed avec #
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Votre compte a été désactivé pour violation de nos conditions d’utilisation - Guide
- Imprimante en cours d'utilisation - Forum Imprimante
- Dossier en cours d'utilisation - Forum Windows 8 / 8.1
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
26 juin 2013 à 11:24
26 juin 2013 à 11:24
Salut,
Déjà mettre des quotes doubles autour de l'expression serait plus orthodoxe ;-))
Que contient ta variable "${chaine_fichier}" ?
Sinon, même si ta syntaxe fonctionnait, dans le cas où "${chaîne}" vaudrait "#", c'est toute ta "${chaine_fichier}" qui serait remplacée par un dièse, et dans le cas contraire elle serait entièrement effacée ;-(
La bonne syntaxe :
Si ta version de sed l'accepte, utilise l'option "-i.bak" qui permet de faire les modifications directement dans le fichier d'origine tout en créant une copie avec l'extension ".bak".
De même, il est fort possible que tu puisses tout faire avec sed, tout dépend de la condition dans ton test (if [ condition ]...) ;-\
Déjà mettre des quotes doubles autour de l'expression serait plus orthodoxe ;-))
Que contient ta variable "${chaine_fichier}" ?
Sinon, même si ta syntaxe fonctionnait, dans le cas où "${chaîne}" vaudrait "#", c'est toute ta "${chaine_fichier}" qui serait remplacée par un dièse, et dans le cas contraire elle serait entièrement effacée ;-(
La bonne syntaxe :
sed '/motif/{s/^/chaine/}' fichierAdapté à ton cas ça donne :
sed -e "\%${chaine_fichier}%{s%^%${chaine}%}" fichier > fichier2
Si ta version de sed l'accepte, utilise l'option "-i.bak" qui permet de faire les modifications directement dans le fichier d'origine tout en créant une copie avec l'extension ".bak".
De même, il est fort possible que tu puisses tout faire avec sed, tout dépend de la condition dans ton test (if [ condition ]...) ;-\
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
26 juin 2013 à 11:31
26 juin 2013 à 11:31
En fait "fichier" contient des lignes qui commencent par une chaîne de caractère prédéfinie
Selon la condition je laisse ces lignes (=suppression de la chaine en début de ligne) soit je la commente (=remplacement par #)
La chaine "chaine_fichier" c'est un truc du genre ##debut_ligne## (avec lui aussi des # mais je peu pas changer sa)
Ce qui m'étonne c'est que j'ai deja fait des sed avec des #
Je vais tester ta syntaxe =)
Selon la condition je laisse ces lignes (=suppression de la chaine en début de ligne) soit je la commente (=remplacement par #)
La chaine "chaine_fichier" c'est un truc du genre ##debut_ligne## (avec lui aussi des # mais je peu pas changer sa)
Ce qui m'étonne c'est que j'ai deja fait des sed avec des #
Je vais tester ta syntaxe =)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
26 juin 2013 à 11:34
26 juin 2013 à 11:34
Avec un exemple concret on pourrait davantage cerner ton problème ;-(
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
Modifié par Lapourax le 26/06/2013 à 11:45
Modifié par Lapourax le 26/06/2013 à 11:45
je complète alors =)
mon fichier et un template, c'est a dire que je ne le modifie pas je crée un autre fichier
Les lignes concernées commencent par une chaine de caractère (##DEBUT_LIGNE##) Comme cette chaine contient des #, je la variablilise
Dans une condition préalable je définie une variable qui viendra remplacer cette chaine de caractères
Puis je fais mon sed
Avec la syntaxe proposée par zipe31
Et maintenant l'erreur est la suivante :
En espérant que sa puisse vous aider =)
Si vous ne réussissez pas du premier coup, appelez ça version 1.0
mon fichier et un template, c'est a dire que je ne le modifie pas je crée un autre fichier
Les lignes concernées commencent par une chaine de caractère (##DEBUT_LIGNE##) Comme cette chaine contient des #, je la variablilise
chaine_origine="##DEBUT_LIGNE##"
Dans une condition préalable je définie une variable qui viendra remplacer cette chaine de caractères
if [ condition ]; then chaine_replace="# " else chaine_replace=" " fi
Puis je fais mon sed
sed -e s%${chaine_origine}%{s%^%${chaine_replace}%}%g fichier > fichier_destination
Avec la syntaxe proposée par zipe31
Et maintenant l'erreur est la suivante :
sed: -e expression #5, char 18: unknown option to 's'
En espérant que sa puisse vous aider =)
Si vous ne réussissez pas du premier coup, appelez ça version 1.0
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
26 juin 2013 à 11:51
26 juin 2013 à 11:51
Avec la syntaxe proposée par zipe31
Euh... non, tu n'as pas utilisé ma syntaxe, tu as modifié la tienne, mais mal ;-((
Il y a une erreur dans la substitution depuis le début, et la cause en est sûrement un caractère, peut être un caractère qui correspond au délimiteur de sed, mais sans voir à la fois ton fichier template, et la chaîne en entier, difficile de t'aider ;-(
D'où ma demande de voir ton fichier ;-\
Euh... non, tu n'as pas utilisé ma syntaxe, tu as modifié la tienne, mais mal ;-((
Il y a une erreur dans la substitution depuis le début, et la cause en est sûrement un caractère, peut être un caractère qui correspond au délimiteur de sed, mais sans voir à la fois ton fichier template, et la chaîne en entier, difficile de t'aider ;-(
D'où ma demande de voir ton fichier ;-\
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
26 juin 2013 à 11:55
26 juin 2013 à 11:55
Je vais y arriver '-_-
Bouge pas je t'envoi sa
Bouge pas je t'envoi sa
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
26 juin 2013 à 11:57
26 juin 2013 à 11:57
La ligne du fichier à modifier ressemble à sa :
##DEBUT_LIGNE##Expression /liege-bouchon/connectPortail*
Elles ont toute le même format (Expression/xxxxx-xxxx/xxxxxx*)
##DEBUT_LIGNE##Expression /liege-bouchon/connectPortail*
Elles ont toute le même format (Expression/xxxxx-xxxx/xxxxxx*)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
26 juin 2013 à 11:58
26 juin 2013 à 11:58
Et elle doit être modifiée comment ?
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
26 juin 2013 à 11:59
26 juin 2013 à 11:59
Apres le fichier est un format qui ressemble à de l'xml avec des balises et des metacaractère a plus savoir quoi en faire...
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
26 juin 2013 à 15:05
26 juin 2013 à 15:05
En fait tu as donné la solution dans la toute première ligne de ta première réponse
Le pb venait bien des doubles cotes...
Mea culpa désolé de t'avoir fait perdre du temps :-/
Le pb venait bien des doubles cotes...
Mea culpa désolé de t'avoir fait perdre du temps :-/