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 - substitution multi-ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Sed - substitution multi-ligne
    Salut,

    J'aimerais extraire une chaîne d'un fichier HTML. Problème : elle est entre deux balises <th> et </th> et je ne peux savoir à quelle ligne (cela peut en plus changer). J'avais donc pensé à identifier la ligne juste avant. Comme je n'ai rien pigé au sed multi-ligne, j'ai eu l'idée de transformer mon fichier HTML en un fichier mono-ligne avec tr -d '\r\n' et faire du sed classique ... Sauf que la variable $country contient tout le fichier HTML ... Pourtant j'ai bien utilisé le \(.*\) et \1

    source.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ......
     
    <td>Country</td>
    <th>France</th>
     
    .......
    script.sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tr -d '\r\n' < ./source.html > ./source_temp.html
    country=$(sed 's|<td>Country</td><th>\(.*\)</th>|\1|' ./source_temp.html)
    echo $country
    Merci d'avance.

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

    comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '\@<td>Country@,\@</th>@{\@ton_motif@p}' ./source.html
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Ah oui, parce que < est un caractère spécial ? Un peu comme & qui m'avait posé problème aussi ...

  4. #4
    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
    10
    11
    12
    13
    14
    15
    $ cat fich 
    ......
     
    <td>Country</td>
    <th>France</th>
     
    .......
    <td>Country</td>
    <th>Spain</th>
    
    .......
    <td>Country</td>
    <th>Italia</th>
    
    .......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed -n '/<td>Country</{n;s/<[^>]*>\([^<]*\).*/\1/p}' fich 
    France
    Spain
    Italia
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Ne serait-ce pas le contraire?
    Car "tr", le r veut dire "row"
    "td", le d veut dire "data"
    "th", le h veut dire "header"

    Il me semble que c'est plus logique que th soit "Country" et td "France".

    @Svengali48:
    Le script initial était bien sauf que l'étoile est gourmande. Il va sélectionner le premier <th> du fichier et le dernier </th> de la ligne. Donc ta variable $country va peut-être commencer par "France", avoir tout le code et finir par "Italie".
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. decoupage fichier multi-ligne avec Sed
    Par archivage-services dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/02/2010, 17h44
  2. [HTML] Supprimer le multi ligne d'une zone de text
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2005, 14h49
  3. Jtable et multi-lignes dans les cellules
    Par tuxor dans le forum Composants
    Réponses: 2
    Dernier message: 19/11/2005, 07h32
  4. [JTree] Libelle multi-ligne d'un noeud
    Par dmasse dans le forum Composants
    Réponses: 6
    Dernier message: 22/07/2005, 15h48
  5. Multi lignes dans un StringGrids ?
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/11/2002, 23h15

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