Extraire une URL d'un fichier (probleme avec grep) [BASH] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 25-03-2007 à 22:23:30
si le cas réel est aussi simple que celui que tu donnes,
cut -d\" -f1 devrait fonctionner mais je suis pas certains qu'il ne faille pas échapper les caractères.
Marsh Posté le 25-03-2007 à 22:34:36
Je ne comprends pas ton utilisation de cut, mais effectivement l'exemple est le cas réel...
Marsh Posté le 25-03-2007 à 22:40:24
[jules@tue-amour ~]$ cat test.txt |
[jules@tue-amour ~]$ grep mms test.txt |cut -d\" -f2 |
Marsh Posté le 27-04-2007 à 10:23:02
Bonjour Redvivi
Une commande possible avec sed:
# wget --quiet http://www.m6.fr/content/video/info/asx/Lille_00_230307.asx -O - | sed -n 's/\(.*\)\(mms:\/\/.*wmv\)\(.*\)/\2/p' |
Marsh Posté le 28-04-2007 à 11:05:45
doit passer comme ca aussi :
cat Lille_00_230307.asx |grep mms:// | awk -F"\"" '{print $2}' |
Marsh Posté le 09-10-2007 à 17:49:49
Bonjour !
Vous m'avez bien aidé pour le cas précédent mais j'ai rebesoin de votre aide , je suis confronté à ce fichier (le méchant):
Code :
|
Je voudrais extraire le mp4 le plus récent du flux (c'est à dire le dernier, je veux juste récupérer l'url http://dl.podcast.m6.fr.ipercast.net/national/p071008190000SARAV9200000.mp4) mais je suis perdu dans les grep les awk les sed etc...quelles sont les commandes à exécuter pour extraire ce fichier ?
Merci d'avance !
RedVivi
Marsh Posté le 09-10-2007 à 17:57:09
tu as des librairies faites pour en perl et des outils CLI pour le faire automatiquement. urlview extrait les urls et affiche un menu derrière, si tu peux récupérer le "moteur" d'extraction le tour sera jouer
> apt-cache search url extract |
Marsh Posté le 09-10-2007 à 18:45:08
O'Gure a écrit : tu as des librairies faites pour en perl et des outils CLI pour le faire automatiquement. urlview extrait les urls et affiche un menu derrière, si tu peux récupérer le "moteur" d'extraction le tour sera jouer
|
Le problème c'est que je ne vais pas utiliser le menu, l'url est incluse dans un script, donc pas de menu possible....ce n'est pas plus simple de le réaliser en shell?
Marsh Posté le 09-10-2007 à 18:46:58
Un peu de xsl : http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Sinon en shell script c possible aussi oué... jte fais ca ce soir si j'y pense
Marsh Posté le 09-10-2007 à 19:04:05
La solution xsl en attendant : tu copies ça dans toto.xsl
<?xml version="1.0" encoding="utf-8" ?> |
et tu fais
xsltproc toto.xsl ton_fichier.xml |
et après ben tu lis le xsl et tu essaies de comprendre (à lire c'est facile à comprendre, à écrire faut avoir un peu de métier)
edit :
A noter : le last() va chercher le dernier <item> (le plus bas dans le fichier), on suppose donc que le plus bas dans le fichier est le plus récent au niveau des dates.
L'équivalent direct en shell script est donc :
cat toto.xml | grep enclosure | sed -e "s/.*url='\([^']*\).*/\1/" | tail -1 |
Le grep garde les lignes contenant enclosure, le sed nettoie pour ne garder que les url, le tail filtre pour garder le dernier.
Si on suppose que le fichier est en désordre, il faut trier en fonction de la date. C'est à peine plus compliqué en xsl, un poil plus (mais pas trop) en shell script
Marsh Posté le 09-10-2007 à 21:48:57
J'ai essayé de modifier le script pour ce type de flux:
Code :
|
Mais je me retrouve avec
Code :
|
On dirait que le sed ne fonctionne pas !?
Merci d'avance !
Marsh Posté le 09-10-2007 à 23:28:46
Mon sed c'est :
sed -e "s/.*url='\([^']*\).*/\1/" |
Or sed c'est de la forme : 's/ce_qu'on_cherche/ce_qu'on_met_à_la_place/' (s pour substitution)
D'abord ce qu'on cherche avec ça (en rouge la version regexp) :
n'importe quoi, suivi d'une espace, suivi de url='
.* url='
on peut capturer un truc pour le ressortir avec \1 plus tard, d'où les parenthèses
\( et plus loin \)
tout sauf ', plein de fois (quand tu mets [^c] ca veut dire tout sauf c)
[^']*
suivi de : ' puis d'autres caractères. On se simplifie la vie, on va juste dire "suivi de n'importe quoi"
.*
d'où la regexp (sans les parenthèses) .* url='[^']*.* et avec les parenthèses .* url='\([^']*\).*
Si tu regardes ton nouveau truc que tu veux filtrer, tu vois qu'on passe de :
url='blablabla' |
à :
url="blablabla" |
Il faut donc travailler avec des " dans sed, au lieu des '. Donc on passe de :
.* url='\([^']*\).*
à :
.* url="\([^"]*\).*
Evidemment pour que sed ne merde pas, il faut soit utiliser des \" au lieu des " (sinon au premier " sed va croire que la commande s'arrête là), soit utiliser des ' ' pour englober la commande, à la place des " ". Cette seconde solution est la plus simple.
Bilan : on passe de
sed -e "s/.*url='\([^']*\).*/\1/" |
à :
sed -e 's/.* url="\([^"]*\).*/\1/' |
Juste une inversion des types de guillemets en fait
cf : http://forum.hardware.fr/hfr/OSAlt [...] tm#t923945 pour un autre exemple de sed qui récupère une url
Marsh Posté le 10-10-2007 à 19:32:05
Génial !! Merci beaucoup !! cependant quelquechose m'embete..j'essaye de faire passer
Code :
|
en argument de wget en entourant la commande avec des ''", ou des ``, mais rien n'y fait ! J'ai loupé quelque chose ?
Merci!
RedVivi
Marsh Posté le 10-10-2007 à 20:30:41
Non c'est censé marcher, il n'y a aucune faute là-dedans. C'est quoi ton erreur
En argument de wget, ca veut dire qu'au lieu du cat file c'est un wget -O - url ?
Marsh Posté le 11-10-2007 à 18:58:10
C'est ok, juste une erreur dans la syntaxe.....Bilan de l'affaire, je progresse lol, par contre comme je ne dépasserai pas le maitre j'ai un petit souci: je n'arrive pas à enlever le Ref1= de Ref1=http://viptf1.yacast.net/tf1jt/jt13d11102007.asf, quand j'enleve les guillemets de sed il met que la syntaxe est incomplète...snif
Marsh Posté le 11-10-2007 à 20:02:08
redvivi a écrit : C'est ok, juste une erreur dans la syntaxe.....Bilan de l'affaire, je progresse lol, par contre comme je ne dépasserai pas le maitre j'ai un petit souci: je n'arrive pas à enlever le Ref1= de Ref1=http://viptf1.yacast.net/tf1jt/jt13d11102007.asf, quand j'enleve les guillemets de sed il met que la syntaxe est incomplète...snif |
poste ton code à problème (bout de sed + bout de xml)
Marsh Posté le 11-10-2007 à 21:56:16
En faisant du cat, j'ai ça:
Code :
|
d'ou:
Code :
|
J'ai juste viré les guillemets vu qu'il n'y en a pas cette fois ci dans l'url mais ça marche pas terrible....lol
Marsh Posté le 11-10-2007 à 22:59:40
redvivi a écrit : En faisant du cat, j'ai ça:
J'ai juste viré les guillemets vu qu'il n'y en a pas cette fois ci dans l'url mais ça marche pas terrible....lol |
Tu as écrit [^] donc une négation de rien, il manque un caractère après le ^
Ce que tu veux toi c'est une chaîne de caractères continue, tu veux tout jusqu'au prochain espace.
Donc "not space" le plus de fois possible, et au premier espace on s'arrête.
Donc [^ ]
Ton [^] (sans rien après le ^) est lu comme ça par sed :
tu as ouvert un crochet
tu as écrit "pas crochet fermant"
mais pas refermé le crochet après...
Le truc c'est qu'on peut écrire tot[aeu] pour chercher tota tote et totu, donc ca ne l'a pas choqué de voir plusieurs caractères après le [. En fait il a vu :
[
puis
^]
puis tout un tas de truc... et arrivé à la fin ben il attend toujours son ] final
Marsh Posté le 14-10-2007 à 15:13:19
Merci infiniment ! finalement ce n'est pas si compliqué que ça...néanmoins, je suis confronté à un problème: je voudrais comparer dans un test le contenu des fichiers (pas par la taille des fichiers, mais le contenu en lui meme) au début, j'avais fait quelque chose de ce genre:
Code :
|
mais ça ne marchait pas trop, j'ai essayé avec
Code :
|
en accord avec cette doc: http://abs.traduc.org/abs-4.2.01-fr/ch07s03.html mais ça ne fonctionne pas non plus...j'ai oublié quelquechose ?
Marsh Posté le 14-10-2007 à 16:50:35
Je ne pense pas qu'un opérateur comme "==" puisse comparer le contenu de 2 fichiers. Regarde plutôt du côté des commandes "diff" ou "cmp" (ou "md5sum"...)
|
Marsh Posté le 14-10-2007 à 16:58:58
en fait l'ideal ce serait une commande qui renvoie un code d'erreur pour l'utiliser directement avec if genre if <commande> file1 file2 then... sans passer par des grep etc...
Marsh Posté le 14-10-2007 à 17:12:14
C'est à dire ? Parce qu'on peut mettre plein de truc dans un if...
Marsh Posté le 14-10-2007 à 17:15:33
oui mais si je veux faire simple? :s ya pas une fonction simple de comparaison qui est directement exploitable sous la forme if <commande> <fichieràcomparer1> <fichieràcomparer2> then....?
Marsh Posté le 14-10-2007 à 17:17:25
if cmp -s file1 file2; then blabla; else blabla; fi
Marsh Posté le 25-03-2007 à 22:18:33
Bonjour à tous !
Tout d'abord, merci de lire mon sujet ! Je fais appel à vous car j'ai un problème, pour des raisons obscures et sournoises que je ne developperai pas ici, je veux recuperer l'URL d'un fichier, j'ai procédé comme ceci:
wget http://www.m6.fr/content/video/inf [...] 230307.asx
cat Lille_00_230307.asx |grep mms://
Malheureusement, j'obtiens:
<Ref href = "mms://stream1.m6.fr.ipercast.net/m6.fr/6minutes/d/59/d070323190000SARAV5900000.wmv" />
Or je voudrais recuperer ce qui est en italique ! Comment dois-je proceder ?
Merci d'avance!
RedVivi