un petit problème tout bête :
j'essaie d'extraire des url d'une page en utilisant sed mais je suis confronté à un problème.
J'arrive bien à récupérer le début de l'url mais pas la fin :
extraire le début : [OK]
moa@oam ~$ cat page.html |grep /truc/m | sed 's/^.*adressedusite//'
/fr/bidule/truc/machin_45203.html">blah
/fr/bidule/truc/machin_45203.html" class="lire" title="lire">Lire
extraire la fin : [NOK]
moa@oam ~$ cat page.html |grep /truc/m | sed 's/^.*adressedusite//' | sed 's/\(^.*\)\(".*\)/\1/'
/fr/bidule/truc/machin_45203.html
/fr/bidule/truc/machin_45203.html" class="lire" title="lire
En fait, il ne coupe qu'à partir du dernier " ...
une idée ?
# uurk
Posté par zecrazytux (site web personnel) . Évalué à 3.
essais de penser à ce que tu veux récupérer et à partir de quoi.
sinon ton probleme à toi vient du fait que sed est greedy, * prendra le maximum de charactères.
tu pourrais rechercher un truc du genre addressedusite([^"]*), mais attention tes balises a peuvent être formés avec des ", ' ou rien du tout (href=...)
# sed c'est bien.
Posté par zerkman (site web personnel) . Évalué à 2.
grep /truc/m < page.html | sed -e 's/^.*adressedusite//' -e 's/".*//'
[^] # Re: sed c'est bien.
Posté par barmic . Évalué à 2.
grep /truc/m page.html | sed -e 's/^.*adressedusite//' -e 's/".*//'
De plus enchainer un grep puis un sed, c'est souvant factorisable :
sed -n -e 's/^.*adressedisite//p'
Après pour ce qui est des expressions régulières dont a besoin l'auteur du fil je n'ai pas bien compris ce qu'il veut en entrée et en sortie.
En tout cas pour récupérer les liens mois je fais ça :
sed -n -e 's/^.*<[aA] .*[Hh][Rr][Ee][Ff]="\?\([^" >]*\)"\? *.*$/\1/gp' index.html
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: sed c'est bien.
Posté par bob le homard . Évalué à 1.
[^] # Re: sed c'est bien.
Posté par zerkman (site web personnel) . Évalué à 2.
non, le shell ne fait que lancer grep avec le fichier comme entrée standard au lieu du terminal. On peut même dire que ma méthode est plus efficace car le terminal n'est jamais ouvert et le fichier html est déjà ouvert au lancement de grep.
Les pipes c'est uniquement lors d'un enchainement de commandes, style:
sort /etc/passwd | more
où là, un pipe est créé, et la sortie standard de sort est redirigée vers le pipe et l'entrée de more est la sortie du pipe.
enchainer un grep puis un sed, c'est souvant factorisable
Tu peux me dire l'intérêt de l'option '-n' ? Ma page man me dit : "suppress automatic printing of pattern space", ce qui à mon sens ne veut rien dire d'humainement compréhensible.
[^] # Re: sed c'est bien.
Posté par zecrazytux (site web personnel) . Évalué à 1.
un test te fera comprendre tout de suite l'interet de l'option
[^] # Re: sed c'est bien.
Posté par barmic . Évalué à 2.
Pour ce qui est de l'option -n de sed. En fait cette option supprime l'affichage automatique. Ce que que tu tu veut qui soit affiché doit l'être explicitement avec l'option p à la fin des expresssions.
Tu peut appliquer la même rêgle si tu utilise grep et awk. Tu peut mettre des conditions dans le langage awk. Du coup si tu utilise grep + cut, il est aussi probable de pouvoir remplacer ça par du awk.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# PEEEEEEERRRRRRRRLLLL
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 3.
perl -MHTML::SimpleLinkExtor -MLWP::Simple -e 'map{print"$_\n"}grep{/REGEXP/}HTML::SimpleLinkExtor->new->parse(get("URL"))->links;'
\o/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.