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 :

Condition dans une substitution


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut Condition dans une substitution
    Bonjour ,
    je voudrais faire un sed sur un répertoire contenant des fichiers xml;
    j'ai donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for fichier in ./flau/*.xml
     do
    	sed -i 's/\(<bibl xml:id="b\)\([0-9].*-3"\)/\1-\2/g' $fichier
    	sed -i 's/\(<bibl xml:id="b\)\([0-9].*"\)/\1-\2/g' $fichier
    done
    Je voudrais pouvoir remplacer la chaine "bxxxx-3" ou "bxxxx" (ou x sont des nombres de 0 à 9, il peut y en avoir plus de 4) par "b-xxxx-3" ou "b-xxxx", si et seulement l'attribut xml:id (dont le format est décrit ci-dessus) est dans une balise <bibl>. Mais certains attributs peuvent être placé avant ! Et il faut gérer cela.
    Voici qq essais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	#sed -i 's/\(<bibl \)\(*\) \(xml:id="b\)\([0-9].*-3"\)/\1-\2/g' $fichier
    	sed -i 's/\(<bibl [a-Z].* xml:id="b\)\([0-9].*-3"\)/\1-\2/g' $fichier
    Exemple:
    <bibl dbp:hand="GF-encre" xml:id="b6431-3">Athalie
    <bibl xml:id="b6432-3">Fautes
    Le second je peux le traiter mais pas le premier. Comment faire svp?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -i 's/\(<bibl [^>]xml:id="b\)\([0-9]*-3"\)/\1-\2/g' $fichier
    sed -i 's/\(<bibl [^>]xml:id="b\)\([0-9]*"\)/\1-\2/g' $fichier
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat f0
    <bibl dbp:hand="GF-encre" xml:id="b6431-3">Athalie
    <bibl xml:id="b6432-3">Fautes
     
    $ sed 's/\(<bibl xml:id="b\)\([0-9]\{4,\}\)/\1-\2/' f0
    <bibl dbp:hand="GF-encre" xml:id="b6431-3">Athalie
    <bibl xml:id="b-6432-3">Fautes
     
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    je voudrais que :
    <bibl xml:id="b6427-3" dbp:hand="GF-encre">Le dépit amoureux
    et
    <bibl dbp:hand="GF-encre" xml:id="b6427-3">Le dépit amoureux
    donne
    <bibl xml:id="b-6427-3" dbp:hand="GF-encre">Le dépit amoureux
    Et ce peut importe si un attribut est placé entre le nom de la balise et l'attribut xml:id.
    Ce serait simple si l'attribut xml:id n'apparaissait que dans les balises <bibl> mais ce n'est pas le cas.

    Je suis très rouillé en regexp.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  5. #5
    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
    Oups j'avions mal compris, je croyais que tu ne voualis pas traiter tous les cas

    Essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat f0
    <bibl dbp:hand="GF-encre" xml:id="b6431-3">Athalie
    <bibl xml:id="b6432-3">Fautes
    <bibl xml:id="b6427-3" dbp:hand="GF-encre">Le dépit amoureux
    <bibl dbp:hand="GF-encre" xml:id="b6427-3">Le dépit amoureux
     
    $ sed 's/\(<bibl [^>]*xml:id="b\)/\1-/' f0
    <bibl dbp:hand="GF-encre" xml:id="b-6431-3">Athalie
    <bibl xml:id="b-6432-3">Fautes
    <bibl xml:id="b-6427-3" dbp:hand="GF-encre">Le dépit amoureux
    <bibl dbp:hand="GF-encre" xml:id="b-6427-3">Le dépit amoureux
     
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  6. #6
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/\(<bibl [^>]*xml:id="b\)/\1-/' $fichier
    Mais chez moi, cela ne fait rien .

    [^>] celui là je comprend pas ?
    je suis sous windows (dsl ) et j'utilise MingW .
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    la boucle n'est pas indispensable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed -n '/<bibl/{/xml:id/s/="\([[:alpha:]]\)/="\1-/g;p}' ./foo/*.xml
    <bibl dbp:hand="="G-F-encre" xml:id="="b-6431-3">Athalie
    <bibl xml:id="="b-6432-3">Fautes
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    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
    Citation Envoyé par tigunn Voir le message
    Mais chez moi, cela ne fait rien .
    Même en reprenant mon exemple (le fichier f0) ?

    Affiches-nous le fichier sur lequel tu testes, ou a défaut mets-le en pièce jointe, sans quoi... même avec nos boules de cristal

    [^>] celui là je comprend pas ?
    Il ne faut pas oublier l'astérisque derrière ([^>]*).
    On englobe tout à l'exception du caractère ">". En gros on s'arrêtera dès qu'on rencontrera ledit caractère.
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  9. #9
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    voila le fichier ;
    merci de votre aide.
    Fichiers attachés Fichiers attachés
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  10. #10
    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
    Ok. Il manquait le flag "g" (totalité) pour traiter toutes les occurrences se trouvant sur une même ligne, ainsi qu'un boute de regex afin de traiter les motifs ayant déja un tiret après le "b".

    Aperçu des occurrences trouvées dans le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ egrep -o '<bibl [^>]*>' g226_1_f_267__r____-ver3.xml 
    <bibl xml:id="b6423-3" dbp:hand="GF-encre">
    <bibl xml:id="b6425-3" dbp:hand="GF-encre">
    <bibl xml:id="b6427-3" dbp:hand="GF-encre">
    <bibl xml:id="b6428-3" dbp:hand="GF-encre">
    <bibl xml:id="b6429-3" dbp:hand="GF-encre">
    <bibl dbp:hand="GF-encre" xml:id="b6431-3">
    <bibl dbp:hand="GF-encre" xml:id="b6432-3">
    <bibl xml:id="b6433-3">
    <bibl xml:id="b6434-3">
    <bibl xml:id="b6436-3" dbp:hand="GF-encre">
    <bibl xml:id="b6438-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6440-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6444-3">
    <bibl xml:id="b-6445-3" dbp:hand="GF-encre">
    Les mêmes après traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ sed 's/\(<bibl [^>]*xml:id="b\)-*/\1-/g' g226_1_f_267__r____-ver3.xml | egrep -o '<bibl [^>]*>'
    <bibl xml:id="b-6423-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6425-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6427-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6428-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6429-3" dbp:hand="GF-encre">
    <bibl dbp:hand="GF-encre" xml:id="b-6431-3">
    <bibl dbp:hand="GF-encre" xml:id="b-6432-3">
    <bibl xml:id="b-6433-3">
    <bibl xml:id="b-6434-3">
    <bibl xml:id="b-6436-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6438-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6440-3" dbp:hand="GF-encre">
    <bibl xml:id="b-6444-3">
    <bibl xml:id="b-6445-3" dbp:hand="GF-encre">
     
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  11. #11
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Superbe, magnifique, déïfique !!!!

    J'ai modifié quelque peu ta commande Zipe31, pour qu'elle fasse les substitutions directement dans les fichiers, et cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for fichier in ./flaubert2/*.xml
     do
      sed -i 's/>Convertion html vers TEI non balisé\./>Script de conversion HTML vers TEI/g' $fichier
      sed -i 's/>Conversion html vers TEI non balisé\./>Script de conversion HTML vers TEI/g' $fichier
      sed -i 's/<authority>ISH UMS 1798/<authority>ISH USR 3385/g' $fichier
      sed -i 's/par les collaborateurs scientifique dans/par les collaborateurs scientifiques dans/g' $fichier
      sed -i 's/\(<TEI xml:id=".*\)-ver0/\1/g' $fichier
      sed -i 's/\(<TEI xml:id="\)\(g22.*"\)/\1cote-\2/g' $fichier
     
     
    	sed -i 's/\(<bibl [^>]*xml:id="b\)-*/\1-/g' $fichier | egrep -o '<bibl [^>]*>'
     
     done
    Enfin, merci infiniment.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  12. #12
    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
    Happy for you

    Mais comme dit plus haut par N_BaH, la boucle est inutile

    De même, en regroupant tes commandes dans un fichier, tu pourrais appeler la commande "sed" qu'une fois au lieu d'en lancer 7 instances

    Mais bon, c'est toi qui vois
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

Discussions similaires

  1. Condition dans une requête croisée
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 18/10/2005, 10h31
  2. Peut on insérer une condition dans une requête ?
    Par MITCH31 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/09/2005, 18h26
  3. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  4. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13
  5. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55

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