Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/06/2016, à 23:42

lynn

[RÉSOLU] Simplifier une commande

Bonjour,

J'utilise cette commande afin de récupérer le nom de de la version d'Ubuntu en développement pour l'intégrer dans un script

wget -O- -q http://cdimage.ubuntu.com/daily-live/pending | grep -i '<dt><a href="'| sed -n 1p | cut -d"\"" -f2 | cut -d"-" -f1,2

Ça fonctionne mais est-ce possible de simplifier car je trouve que les deux "cut" à la suite, ça ne fait pas très productif...

Merci pour vos suggestions.

Dernière modification par lynn (Le 14/06/2016, à 21:06)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 14/06/2016, à 06:16

pingouinux

Re : [RÉSOLU] Simplifier une commande

Bonjour,
Essaye

wget -O- -q http://cdimage.ubuntu.com/daily-live/pending | grep -m1 -Po '(?<=<dt><a href=")[^-]+-[^-]+'

ou bien

wget -O- -q http://cdimage.ubuntu.com/daily-live/pending | awk -F'["-]' '/<dt><a href="/{print $2"-"$3;exit}'

Hors ligne

#3 Le 14/06/2016, à 07:43

lynn

Re : [RÉSOLU] Simplifier une commande

Merci pingouinux,

Je ne comprends pas trop cette partie

-Po '(?<=

L'aide de grep indique

--help a écrit :

  -P, --perl-regexp         MOTIF est une expression rationnelle en Perl

C'est du perl la partie récupérée avec wget?


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 14/06/2016, à 08:14

pingouinux

Re : [RÉSOLU] Simplifier une commande

C'est du perl la partie récupérée avec wget?

Non, c'est du texte, mais l'expression rationnelle (?<=texte) est utilisée par perl (que je ne connais pas).

grep -Po '(?<=texte1)texte2' ...

La ligne doit contenir texte1 suivi de texte2, mais seul texte2 apparaîtra dans la sortie.

Voici encore une autre façon de faire

wget -O- -q http://cdimage.ubuntu.com/daily-live/pending | sed -nr '/<dt><a href="/{s/.*"([^-]+-[^-]+)-.*/\1/p;q}'

Hors ligne

#5 Le 14/06/2016, à 08:34

lynn

Re : [RÉSOLU] Simplifier une commande

Merci pour les compléments d'information. On apprends toujours beaucoup dans cette section du forum. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 14/06/2016, à 20:12

k3c

Re : [RÉSOLU] Simplifier une commande

Si tu veux te mettre à Python, un script minimal

$ more p1.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-     
import requests
import bs4 as BeautifulSoup
html = requests.get('http://cdimage.ubuntu.com/daily-live/pending')
soup = BeautifulSoup.BeautifulSoup(html.text)
for x in soup.findAll('dt'):
    print x.a['href'].split("-")[0]

Ce qui affiche

$ python p1.py 
yakkety
yakkety
$ 

Tu auras besoin d'installer
requests
http://docs.python-requests.org/en/master/

et BeautifulSoup pour parser du Html
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

On pourrait tester que

html.status_code

vaut bien 200 (http code pour dire que le site est disponible, contrairement à 404 ou 500) avant de continuer


l'instruction se finissant par

.split("-")[0]

veut dire que l'on sépare en 2 mots une chaine de caractères contenant un tiret, et on prend la première chaine

Si tu veux tester des trucs avec un prompt Python, je te conseille bpython
faire

sudo apt-get install bpython

pour l'installer
qui fait de l'autocomplétion, par exemple si tu fais

import req

il va te proposer requests, vu que c'est le seul module qui commence par req, donc tu appuies sur la touche Tab, et tu as

import requests

Dernière modification par k3c (Le 14/06/2016, à 21:22)


Archlinux sur Xiaomi Air 13

Hors ligne

#7 Le 14/06/2016, à 21:05

lynn

Re : [RÉSOLU] Simplifier une commande

Merci pour les infos k3c. J'en prends bonne note. smile

Je passe mon sujet en résolu et encore un très grand merci à pingouinux.

Dernière modification par lynn (Le 22/08/2016, à 07:57)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne