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

Shell et commandes GNU Discussion :

sed et parenthèse


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut sed et parenthèse
    Bonjour,

    J'ai une petite question concernant 'sed'. Je souhaiterais, dans un fichier, remplacer une chaîne contenant des parenthèses et des /, mais cela ne fonctionne pas, malgré que j'utilise le caractère d'échappement \.
    J'aimerais remplacer "blabla (test /3)" par "blabla". Voici la commande que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/blabla \(test \/3\)/blabla/g" toto.txt
    Je ne reçois aucune erreur, mais la chaîne n'est pas modifiée.
    Auriez-vous une idée ?

    Merci

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    1 - Remplacer le caractère délimiteur par défaut ( / ) par n'importe quel caractère ne risquant pas d'interférer. Ici le dièse (#) par exemple

    2 - Tant qu'on n'a pas trouvé la bonne syntaxe, éviter d'employer l'option "-i", l'affichage par défaut sur la sortie standard (l'écran) fait office de test et ne risque pas d'altérer le fichier original en cas d'erreur.

    3 - Inutile de protéger les parenthèses dans ton cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat fich 
    J'aimerais remplacer blabla (test /3) par blabla. Voici la commande que j'utilise : 
     
    $ sed 's#blabla [^)]*)#blibli#g' fich 
    J'aimerais remplacer blibli par blabla. Voici la commande que j'utilise :
    Attention, cette solution n'est pas optimisée, elle s'applique juste à l'exemple créé avec le peu de renseignements donnés
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    Il ne faut surtout pas échapper la parenthèse car c'est à ce moment-là que tu fabriques un groupe. La parenthèse simple n'est pas interprétée par défaut.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Il ne faut pas echapper les parenthese :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    --> echo "blabla (test /3)"  | sed "s/blabla (test \/3)/blabla/g"
    blabla
    permet de capturer motif dans debutmotiffin pour le reutiliser dans la chaine de remplacement avec \1 ( 1 pour la premiere capture ... )

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    ok, je pensais qu'il fallait échapper les parenthèses.
    C'est en ordre !
    Merci à vous ;-)

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

Discussions similaires

  1. Shell : sed, substitute et parenthèse capturante
    Par supertotal dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 04/05/2009, 12h22
  2. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 09h34
  3. Makefile et sed
    Par pitistef dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 10/02/2004, 15h06
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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