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 :

Extraction d'un regex


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut Extraction d'un regex
    Bonjour,

    A la lecture d'un fichier j'arrive à remplacer une chaîne de caractère qui varie à un endroit (à l'aide d'un regex) par une autre avec la valeur trouvée mais je voudrais isoler le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -ri 's@truc(.*)@machin\1@' $fichier
    Il change bien comme je veux dans le fichier mais je voudrais effacer tout le reste. J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reste=`code ci-dessus`;echo $reste
    Mais ca ne marche pas. C'est peut-être tout simple, je cherche depuis 45mn, merci par avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut


    Bonjour,

    un exemple, avant-après, s'il te plaît ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    wow quelle réactivité, merci

    AVANT : <link data-rh="true" rel="amphtml" href="https://site.com/amp/1005375"/> (le chiffre après amp/change à chaque fois)
    APRES : <a href="https://site.com/amp/1005375/>ici</a>

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Il change bien comme je veux dans le fichier
    donc, ça, tu arrives à le faire.
    je voudrais isoler le résultat
    je voudrais effacer tout le reste

    `comprends pas.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    En fait sed remplace mon "occurence" comme il faut mais j'aimerais juste garder le "APRES" quitte à l’exporter (isoler) dans une variable. A la fin je souhaiterais avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $goodUrl
    <a href="https://site.com/amp/1005375"/>ici</a>
    Je sais ça doit être tout bête, merci quand même

    PS : la ligne duquel c'est extrait compte 5268 caractères, le "AVANT" n'est pas une ligne à lui tout seul, ce qui simplifierait tout

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat fichier
    <link data-rh="true" rel="amphtml" href="https://site.com/amp/1005375"/>
    $ sed 's@<link data-rh="true" rel="amphtml"@<a@;s@/>@>ici</a>@' fichier
    <a href="https://site.com/amp/1005375">ici</a>

  7. #7
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    Oulà mais je m'esprime mal, personne me comprend

    Il y a 297 lignes dans le fichier, celle sur laquelle je travaille fait 5268 caractères, le cat donne pas ça du coup.
    J'ai trouvé ça en attendant. J'ai abandonnée l'idée du <a href>, je voulais juste extraire une url de fichiers toujours différents (amp/)([0-9]{7}), mais ma démarche est la même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ sed -ri 's@.*(<link data-rh=\"true\" rel=\"amphtml\" href=\"https://site.com/amp/)([0-9]{7}).*@https://site.com/amp/\2@' $fichier
    $ goodUrl=`sed -n 1p $fichier`
    $ echo $goodUrl
    https://site.com/amp/1005375
    Effectivement je ne cherche pas à transformer mais à extraire comme le titre du post indique. Extraire une chaîne avec une partie inconnue d'où le Regex.
    Si tu vois plus simple ce serait intéressant. Je ne maîtrise absolument pas les flux et les sortie, les tampons etc (style à: ou le contraire je ne sais plus)

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    ce qui explique peut-être qu'on ait du mal à comprendre ce que tu veux.
    tu imagines que c'est compliqué, alors ta description est compliquée.

    restons simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ var=$(grep 'https://site.com/amp/' ton fichier
    et si ça ne suffit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(sed -n '/ta_regex_qui_matche/p')
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    On t'a demandé avant/après.
    On répond donc à avant/après.

    Si tu écris n'importe quoi, on n'y peut rien.


    Le grep est une bonne idée. Ne manque-t-il pas l'option -o ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(grep -o 'https://site.com/amp/[0-9]\{7\}' fichier )

  10. #10
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    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
    #!/bin/bash
     
    fichier=~/index.html
    url=`xsel --clipboard`
    wget -q $url -O $fichier
     
    sed -ri 's@.*(<link data-rh=\"true\" rel=\"amphtml\" href=\"https://www.lesechos.fr/amp/)([0-9]*).*@https://www.lesechos.fr/amp/\2@' $fichier
     
    goodUrl=`sed -n 1p $fichier`
     
    firefox --new-tab $goodUrl
    sleep 10
    rm $fichier
     
    exit
    Dans le presse-papier (url=`xsel --clipboard`) :
    http://tr-emailing.lesechos.fr/lnk/A...re_8h-20190402

    Lire les contenu de cette page pour extraire cette adresse : https://www.lesechos.fr/amp/1005792 et ensuite la passer en résultat.

    ca marche bien, mais j'aimerais ne pas créer de fichier, tout réaliser dans les flux avec des pipes (sed, grep, awk, cut, tail etc), juste obtenir avec $ echo goodUrl un https://www.lesechos.fr/amp/1005792 sans créer de fichier.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    voilà, comme ça, c'est clair !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firefox "$(wget -qO - "$url" | sed -rn 's/regex/output/p')"
    en gros.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    Wooooow c'est propre, merci

    c'est top

    Pour le -qO,
    --quiet exécuter en mode silencieux (sans sortie)
    --output-document=FICHIER écrire les documents dans le FICHIER

    il n'écrit aucun fichier? J'ai essayé sans le -O ça ne fonctionne pas.

    Encore merci

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Il n'y a pas aucun fichier. Il y a -.
    C'est la sortie standard.

    Il faut apprendre à lire la documentation :

  14. #14
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    C'est vrai j'avais remarqué puis zappé le '-'.
    Par défaut la sortie standard est l'écran ...

    Je vais RTFM

    En tous cas merci encore, ce n'est pas la première fois que tu me dépannes.
    Je marquerais résolu après lecture man wget

  15. #15
    Membre confirmé Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Par défaut
    Je n'ai pas accès à une console mais un browser oui https://www.gnu.org/software/wget/manual/wget.html

    You would like the output documents to go to standard output instead of to files?
    wget -O - http://jagor.srce.hr/ http://www.srce.hr/


    Voilà merci encore à vous N_BaH, Flodelarab et les autres.

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

Discussions similaires

  1. [REGEX] Extraction d'une adresse email
    Par ploxien dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/11/2008, 17h32
  2. [Regex] Extraction secondes minutes heures jour mois
    Par reeda dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 23/10/2008, 11h00
  3. Probleme de regex - extraction url avec tiret
    Par joboy84 dans le forum Langage
    Réponses: 1
    Dernier message: 01/07/2008, 20h37
  4. [RegEx] Pb Regex extraction URL
    Par fly06 dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2006, 21h58
  5. [regex]extraction de lignes
    Par afrikha dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 15/09/2006, 12h46

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