IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Problème de sed et expression régulière


Sujet :

Linux

  1. #1
    Membre actif Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Points : 239
    Points
    239
    Par défaut Problème de sed et expression régulière
    Salut,

    Je suis entrain de mettre en place un petit script pour mettre à jour des fichiers de propriété.

    J'utilise cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/\(export PATH=\).*/\1$PATH/" $monFichier
    Le contenu de $PATH est /home/monutilisateur/mondossier.

    J'ai utilisé la même commande pour mettre à jour d'autre variable que le path et ça à fonctionné, je pense que l'erreur est liée à la présence de "/" dans la valeur de ma variable.

    Le message d'erreur est :
    sed: -e expression #1, char 31: unknown option to `s'
    Quelqu'un voit où se situe le problème?
    Pourquoi vouloir ré-inventer la roue...
    ...Surtout si c'est pour la faire carrée...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense que le problème se situe au niveau du '/' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/\(export PATH=\).*/\1$PATH/" $monFichier
    C'est quoi ce \1 ?

  3. #3
    Membre actif Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Points : 239
    Points
    239
    Par défaut
    Salut et merci pour l'intérêt porté à mon post...
    Le \1 permet de dire que je veux remplacer la fin de la ligne (tout ce qui se trouve après export PATH=) par la variable $path.

    Je redoute aussi que le problème vienne du "/" mais je ne sais comment faire pour l'échapper.
    Pourquoi vouloir ré-inventer la roue...
    ...Surtout si c'est pour la faire carrée...

  4. #4
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    @ cheval_boiteux:
    le \1 est un champ représenté par son numéro
    dans le script sed suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/\(export PATH=\).*/\1$PATH/" $monFichier
    le champ est donc \1 equivaut à Cordialement
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  5. #5
    Membre actif Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Points : 239
    Points
    239
    Par défaut
    C'est effectivement mieux expliqué que par moi...
    Par hazard, paissad aurais-tu une idée pour mon problème?
    Pourquoi vouloir ré-inventer la roue...
    ...Surtout si c'est pour la faire carrée...

  6. #6
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Citation Envoyé par Empty_body Voir le message
    Salut et merci pour l'intérêt porté à mon post...
    Le \1 permet de dire que je veux remplacer la fin de la ligne (tout ce qui se trouve après export PATH=) par la variable $path.

    Je redoute aussi que le problème vienne du "/" mais je ne sais comment faire pour l'échapper.
    Pour échapper la variable $NOUVEAU_PATH qui a pour valeur /home/monutilisateur/mondossier, il faut faire comme ceci avec les guillemets
    utilises par contre les quotes pour que ça passe
    ou fait un copier-coller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed -i 's/^\(export PATH=\).*/\1"$NOUVEAU_PATH"/' $monFichier
    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  7. #7
    Membre actif Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Points : 239
    Points
    239
    Par défaut
    Ca fonctionne, un grand merci.
    Moi qui redoutait de devoir passer par une étape intermédiaire, type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PATH=`echo $PATH |  sed "s/\\//\\\\\\\\\//g"`
    Finallement, la solution proposée ne fonctionne pas, j'ai dû utiliser la mienne car les " empèche l'interprétation de la variable $PATH. Je me retrouve avec export PATH=$PATH au lieu de export PATH=/var/...

    Merci quand même.
    Pourquoi vouloir ré-inventer la roue...
    ...Surtout si c'est pour la faire carrée...

  8. #8
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Il y a une autre solution à ce problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed -i "s/\(export PATH=\).*/\1$PATH/" $monFichier
    devient
    sed -i "s%\(export PATH=\).*%\1$PATH%" $monFichier
    Il est en effet possible de changer le délimiteur de sed directement. pour cela il suffit de remplacer "/" par "%" ou autre (#, £, etc..).
    Pratique lorsque l'expression contient "/" séparateur par défaut de sed.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  9. #9
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Voici ce qui marche à merveille alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s,\(export PATH=\).*,\1$PATH," $monFichier
    car en effet dans ton $PATH, il y'a de slash / et imagine comment sed devrait interpréter ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/\(export PATH=\).*/\1/home/monuser/mondossier/" $monFichier
    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  10. #10
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    @paissad : copiteur va
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  11. #11
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    @ Winnt je promets que je n'avais pas vu ton message avant
    mais, je ne jugeais pas utile de supprimer le mien
    Mais bon .......

    @Empty_body n'oublie pas de marquer résolu
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  12. #12
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut

    @paissad :

    Citation Envoyé par paissad
    mais, je ne jugeais pas utile de supprimer le mien
    Et pour quelles raisons l'aurais tu fait ?

    En plus je n'avais jamais pensé à la virgule.
    paissad
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur une simple expression régulière
    Par bernidupont dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 19/02/2013, 14h49
  2. [WD14] Problème de construction d'expression régulière
    Par jimmypage dans le forum WinDev
    Réponses: 13
    Dernier message: 05/01/2012, 15h00
  3. [RegEx] Problème pour concevoir une expression régulière
    Par lokicorp dans le forum Langage
    Réponses: 5
    Dernier message: 08/07/2011, 13h12
  4. [RegEx] Problème avec ereg et expression régulières
    Par kanabzh29 dans le forum Langage
    Réponses: 2
    Dernier message: 08/08/2008, 14h53
  5. Problème de création d'expression régulière
    Par Ithomir dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2006, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo