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 :

[Shell] Intégrer des commandes externes dans sed pour substitution


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Par défaut [Shell] Intégrer des commandes externes dans sed pour substitution
    Bonjour à tous,
    je cherche à exécuter une commande unix au sein du pattern de remplacement de sed.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/&/g"
    affiche la même chaine qu'au départ.

    Je voudrais pouvoir faire, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/`expr & + 5`/g"
    mais çà ne marche pas.

    Quelqu'un sait-il intégrer des commandes externes dans sed ?

    Merci de l'intérêt que vous pourrez porter à la question.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Le Mage Voir le message
    Bonjour à tous,
    je cherche à exécuter une commande unix au sein du pattern de remplacement de sed.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/&/g"
    affiche la même chaine qu'au départ.

    Je voudrais pouvoir faire, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/`expr & + 5`/g"
    mais çà ne marche pas.

    Quelqu'un sait-il intégrer des commandes externes dans sed ?

    Merci de l'intérêt que vous pourrez porter à la question.
    Non. Tu demandes à sed de rappeler un sous-shell pour exécuter expr en lui passant ta chaine initiale mais sed ne sait pas exécuter des commandes.
    Quand tu tapes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/`commande quelconque`/g"
    Le shell commence par exécuter "commande quelconque". Cette commande est sensée afficher un texte "xxx" donc le shell récupère ce "xxx" et le replace à l'endroit de la commande. A ce moment là, en mémoire, le shell récupère cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/11/xxx/g"
    Et là, il appelle la commande "sed" qui exécute le travail demandé.

    Par ailleurs je ne vois pas pourquoi tu as besoin de faire comme ton premier essai. Il est vraisembable que ta chaine de départ (ici 11) tu l'as avant d'appeler sed (style dans une variable on va dire "orig").
    Donc tu crées une seconde variable "copie" qui contient ta modif
    Puis tu appelles ton sed en lui passant orig et copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 11aa11 | sed "s/$orig/$copie/g"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par Le Mage Voir le message
    Quelqu'un sait-il intégrer des commandes externes dans sed ?
    Oui. À ma connaissance, c'est limité à Gnu sed.
    C'est la cmmande "e" (qui ne fonctionne pas tout à fait comme tu le souhaiterais).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $> echo 11b5 | sed -r 's/([0-9]+)[^0-9]+([0-9]+)/expr \1 + \2/;T;e'
    16
    $> echo 11b | sed -r 's/([0-9]+)[^0-9]+([0-9]+)/expr \1 + \2/;T;e'
    11b
    Je ne comprends pas très bien ce que tu veux faire au juste. Il est probable qu'utiliser du shell, plutôt que sed, soit plus judicieux pour faire ton calcul.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Par défaut
    Merci pour vos avis éclairés

    Effectivement, depuis j'ai passé la manipulation en shell, çà facilite les choses !

    La question était plutôt informative, d'où l'exemple simple. Je me suis souvent posé la question des intégrations de commandes à travers les regexp ... puis il faut l'avouer, le vieux rêve de tout faire en une ligne

    Gnu SED a l'air sympa cependant

    Donc pour résumer => `commande` veut dire nouveau Shell et nouveau contexte, commande executée à part. A faire rentrer dans ma petite tête.

    Encore merci !

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    [QUOTE=Le Mage;2952039]Donc pour résumer => `commande` veut dire nouveau Shell et nouveau contexte, commande executée à part.
    Ca veut dire très exactement
    1) exécution de la commande dans un sous-processus
    2) récupération de l'intégralité du texte qui aurait été affiché à l'écran par la commande si on l'avait lancé directement
    3) remplacement, dans le script, de la partie `commande` par le texte récupéré en 2 puis reprise du script à cet endroit là

    Citation Envoyé par Le Mage Voir le message
    A faire rentrer dans ma petite tête.
    Hyper important. Ca permet au shell de déléguer au reste du monde tout ce qu'il ne sait pas faire lui-même.
    Imagine que t'aies besoin de faire un truc hyper compliqué, style calcul différentiel de 4° degré associé à des équations quantiques, ben il te suffit
    - soit de récupérer un programme qui fait cela (style matlab)
    - soit de l'écrire toi-même (en C)
    Le seul impératif est que ton programme affiche ses résultats à l'écran (un simple printf).
    Une fois le programme fait, ben tu récupères ses résultats dans tes scripts par un simple appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result=`mon_programme_super_puissant`
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/06/2010, 15h19
  2. [SP-2007] Intégrer des applications externes dans SP 2007
    Par benharperr dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/04/2010, 14h44
  3. [Forum] Intégrer des commandes AT dans du code javascript ou script php
    Par steeveness dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 17/01/2009, 17h52
  4. Utiliser des commandes linux dans un shell
    Par Info_76 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/03/2008, 12h03
  5. Commande AWK ou SED pour modification données dans fichier
    Par desbrandesq dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 17h56

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