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 :

sed et retour à la ligne


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut sed et retour à la ligne
    Bonjour,

    Voilà je cherche à remplacer des chaînes de caractères dans des dossiers et sous-dossiers sous Linux mais j'ai des problèmes lorsque des retours à la lignes viennent s'imiter dans la ligne que j'essaye de remplacer.

    J'ai donc tout d'abord essayer avec la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #find /var/www -type f -exec sed -i -e 's/\($[a-z0-9A-Z_]*\)\( *= *\)\(reqmysql *(.*) *;\)/\1\2\3\n\1->execute();/g' {} \;
    mais malheureusement comme expliquer au dessus, dès qu'il y a un retour à la ligne, ma commande ne s'exécute plus, sinon elle fonctionne parfaitement.

    J'ai donc essaye ensuite avec une autre commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /var/www -type f -exec sed -i -e 'N;s/\($[a-z0-9A-Z_]*\)\( *= *\)\(reqmysql *(\n*.*) *;\)/\1\2\3\n\1->execute();/g;P;D;' {} \;
    Cette fois-ci les retours à la ligne sont bien prit en compte mais là encore un problème survient, je ne sais pas pourquoi, mais la ligne que j'essaye de rajouter avec ma commande s'écrit parfois plusieurs fois.


    Si quelqu'un aurait une solution ou connaîtrais la raison de ce problème, je l'en remercie d'avance de bien vouloir m'en faire part.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    sed ... tout comme son frêre ed ... a été conçu pour travailler avec des lignes (séparées par des "line feed") peut-être serait-il utile d'expliquer (avec exemples) le but recherché ?

    Dès que les arguments de sed deviennent illisibles il est urgent de remettre le problème à plat.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    Dans les fichiers que j'ai a changer je peux tomber sur 2 cas distincts a remplacer :
    Tout d'abord le premier, plus simple et plus courant :
    $req_joueurs = reqmysql('SELECT * FROM 'joueurs_internationaux' ORDER BY nom');
    Là, la première commande que j'ai créer fonctionne parfaitement et effectue bien ce que je souhaite.

    Ensuite le deuxième que je peux rencontrer est le suivant :
    $req_param = reqmysql('
    SELECT * FROM 'droit' JOIN 'table'
    SELECT * FROM 'droit' JOIN 'table'
    WHERE 'module'="livredor" AND 'page'="signer";
    ') ;
    et c'est celui là qui me pose problème, car je n'arrive pas à gérer convenablement les retours à la ligne, une action est bien effectuer, mais parfois effectuer plusieurs fois, je ne sais pourquoi et j'arrive donc parfois à la chose suivante:
    $req_param = reqmysql('
    SELECT * FROM 'droit' JOIN 'table'
    SELECT * FROM 'droit' JOIN 'table'
    WHERE 'module'="livredor" AND 'page'="signer";
    ') ;
    $req_param->execute();
    $req_param->execute();
    $req_param->execute();
    Alors que je souhaiterais que la ligne d'execute() ne soit écrite qu'une seule fois.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    J'avais besoin de réviser awk. Je n'en suis pas un pro mais ceci devrait faire le travail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    awk 'BEGIN {mark=0;newOper=""}
          /^.*req_.*/ {mark=1; oper=$1}
          /^.*) *;.*/ {if (mark) newOper=oper"->execute();";mark=0}
         {
            print
            if (newOper != "")
                    {print newOper;newOper=""}
          }' $fichier

  5. #5
    Expert confirmé

    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
    Par défaut
    Salut,

    Je t'ai donné la solution avec "sed" sur un autre forum, je la mets ici aussi à titre d'exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    :z
    /^\n*$.*) *;$/ {
    s/\($[^ ]*[^=]*\)\( *=[^)]*) *;\)$/\1\2\n\1->execute();/
        b
    }
    /) *;$/ !{
        N
        b z
    }
    À mettre dans un fichier texte (script.sed) et à lancer comme suit : sed -f script.sed fichier

  6. #6
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par défaut
    Encore merci zip, fonctionne parfaitement, par contre je n'ai pas trouver comment on met que le problème était résolu, je ne sais pas si cela existe sur ce forum.

    Donc voila, encore merci.

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

Discussions similaires

  1. Retour à la ligne après une certaine balise (sed ?)
    Par openlife dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/04/2011, 19h32
  2. Caractère de retour à la ligne.
    Par Pari dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2009, 09h59
  3. [JTextArea] Fichier et retour à la ligne
    Par eraim dans le forum Composants
    Réponses: 4
    Dernier message: 23/06/2004, 08h21
  4. [MFC] Retour à la ligne dans un CEdit
    Par Kant dans le forum MFC
    Réponses: 7
    Dernier message: 18/02/2004, 08h58
  5. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50

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