Forum Programmation.shell Extraire des lignes comprises entre 2 motif

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
8
juin
2020

Bonjour..

Ce que je cherche à faire :
dans un gros fichier texte je cherche à extraire des lignes comprises entre 1 motif de départ et 1 motif de fin ici je cherche a extraire le lien de l'image
j'ai essayé cette commande mais ca na pas fonctionner
sed -n '/motif1/,/motif2/p' fichier

https://pastebin.com/3GFbCdKA

  • # Oukisson ?

    Posté par  . Évalué à 1.

    Salut,

    Dans ton fichier imbuvable, ils sont où les motifs (début et fin) et où il est le lien ?

    • [^] # Re: Oukisson ?

      Posté par  . Évalué à -5.

      motif1 = src="
      motif2 = "

      • [^] # Re: Oukisson ?

        Posté par  . Évalué à 1.

        Déjà ton fichier il est au format Micro$oft ;-(

        Donc faut le convertir avant avec dos2unix.

        Ensuite, je ne sais pas pourquoi, sed ne veut pas prendre tout l’intervalle avec cette syntaxe :

        sed -n '/.*src="/,/".*/{//d;p}' fichier

        Donc, il reste grep, qui lui est plus docile :

        grep -Pzo 'src="\K[^"]*' fichier

        ;-)

      • [^] # Re: Oukisson ?

        Posté par  . Évalué à 1.

        Un truc qui marche avec sed :

        sed -n ':z;N;$!bz;s#.*src="\([^"]*\)".*#\1#p' fichier
        ;-)

  • # Avec Perl

    Posté par  . Évalué à 2. Dernière modification le 08 juin 2020 à 15:34.

    Bonjour,

    En laissant les lignes coupées, avec une ligne de séparation :

    perl -0777 -ne 'print map("$_\n\n", /(?<=src=").*?(?=")/sg)' fichier.txt

    Mais tu ne nous as pas dit ce que tu espérais récupérer exactement au bout.

    En recollant les lignes d’un même champ src (en enlevant aussi les espaces de début de ligne) :

    perl -0777 -ne 'print map({s/\s*\n\s*//g; "$_\n"} /(?<=src=").*?(?=")/sg)' /tmp/fichier.txt

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.