#1 Le 13/06/2016, à 22: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, à 20:06)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2 Le 14/06/2016, à 05: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, à 06:43
- lynn
Re : [RÉSOLU] Simplifier une commande
Merci pingouinux,
Je ne comprends pas trop cette partie
-Po '(?<=
L'aide de grep indique
-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, à 07: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, à 07:34
- lynn
Re : [RÉSOLU] Simplifier une commande
Merci pour les compléments d'information. On apprends toujours beaucoup dans cette section du forum.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#6 Le 14/06/2016, à 19: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, à 20:22)
Debian 12 sur Thinkpad reconditionné
Hors ligne
#7 Le 14/06/2016, à 20:05
- lynn
Re : [RÉSOLU] Simplifier une commande
Merci pour les infos k3c. J'en prends bonne note.
Je passe mon sujet en résolu et encore un très grand merci à pingouinux.
Dernière modification par lynn (Le 22/08/2016, à 06:57)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne