#1 Le 23/04/2019, à 14:55
- Tutobenne
Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Bonjour,
Je cherche à récupérer le contenu d'une page html afin d'établir une liste.
Pour cela j'utilise la commande ci-dessous :
liste=`cat ${maliste} | grep -o 'https://[^"]*'`
Le tout est situé dans une boucle for afin de récupérer chaque ligne.
Cependant petit problème : Ma liste ce voit subir un saut de ligne à chaque espace présent, ce que j'obtiens ce présente ainsi :
https://www.test.com/fichier1.xml'
target='trucbidule1.xml</a><td>09
April
2019
13:29:00</td><td>3
KB</td></tr>
Cependant j'aimerais faire tenir le tout sur 1 ligne ... Pourriez-vous m'aider svp ?
De plus, je voudrais aussi récupérer pour chaque ligne le contenu entre les balises <td> (la date donc, dans le but de la vérifier avant de procéder plus tard a un téléchargement du fichier, si vous avez des idées je suis preneur :)
Pour le moment j'ai ceci :
variable="sed -n 's,.*<td>\(.*\)</td>,\1,p'"
Mais je soupconne que le saut de ligne effectuer par mon cat, empêche le bon fonctionnement de la commande.
Je débute donc désolé si il y a des grosses fautes dans mon code ^^
Voici mon bout de code en entier pour plus de précisions :
liste=`cat ${maliste} | grep -o 'https://[^"]*'`
date="test"
#echo "$liste" >> ${maliste_2}
rm ${maliste} #vide le fichier pour réécrire dedans (car il contient des infos inutiles pour le moment)
for file in $liste
do
variable="sed -n 's,.*<td>\(.*\)</td>,\1,p'"
echo "$file" >> ${maliste}
#seulement dans le but d'un test, ce if permettra de ne récupérer que les lignes a la date du jour
if [[ $date = "09 April 2019 14:39:47" ]]
then
echo "OK : $variable"
fi
done
Merci pour ceux qui pourront prendre le temps de m'aider :)
Hors ligne
#2 Le 23/04/2019, à 14:58
- Watael
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
salut,
le xml ne doit pas être traité avec le shell.
il faut utiliser Xpath et éventuellement XSLT.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 23/04/2019, à 15:17
- Tutobenne
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Salut !
Merci de ton retour, cependant ce n'est pas du xml que je traite pour le moment c'est une page html (même si oui en effet je cherche à télécharger un xml)
Hors ligne
#4 Le 23/04/2019, à 15:29
- k3c
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
avec un parser Html comme BeautifilSoup, ça sera court et plus fiable.
si ton site n'est pas confidentiel
Debian 12 sur Thinkpad reconditionné
Hors ligne
#5 Le 23/04/2019, à 15:33
- Tutobenne
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
avec un parser Html comme BeautifilSoup, ça sera court et plus fiable.
si ton site n'est pas confidentiel
Malheureusement il l'est
Et je suis dans un environnement où je ne peux pas installer ce que je veux
Mais merci de ta proposition !
Hors ligne
#6 Le 23/04/2019, à 15:37
- Watael
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
xml, html, c'est pareil, ce sont des "langages" à balises (ce qui ne les oblige à aucune rigueur formelle*)
ils peuvent être traités avec les mêmes outils.
* tu peux aussi bien avoir
<a href="adress">lien</a>
que
<a
href="adress"
>
lien</a>
et, ce, sur une même page (ce sera interprété de la même manière par un navigateur).
Alors, va parser ça en shell !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 23/04/2019, à 16:20
- k3c
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Debian 12 sur Thinkpad reconditionné
Hors ligne
#8 Le 23/04/2019, à 16:34
- k3c
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
superbe résultat,
Debian 12 sur Thinkpad reconditionné
Hors ligne
#9 Le 24/04/2019, à 10:31
- Tutobenne
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Merci pour vos retours lol
J'ai bien conscience que ce n'est pas le top en terme de dev' cependant dans l'environnement où je suis je n'ai pas trop le choix
Hors ligne
#10 Le 24/04/2019, à 10:52
- pingouinux
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Bonjour,
Il y a toujours moyen de bricoler quelque chose, mais il faudrait que tu montres un exemple du fichier de départ, et de celui que tu souhaites obtenir.
Ce qui m'étonne, c'est que tu écrases le fichier d'origine : ça ne doit pas être facile de faire des essais…
Hors ligne
#11 Le 24/04/2019, à 11:21
- Tutobenne
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Bonjour,
Il y a toujours moyen de bricoler quelque chose, mais il faudrait que tu montres un exemple du fichier de départ, et de celui que tu souhaites obtenir.
Ce qui m'étonne, c'est que tu écrases le fichier d'origine : ça ne doit pas être facile de faire des essais…
Pas de problème !
Un exemple de ce qui je télécharge (fichier d'origine) :
<!DOCTYPE html>
<html lang="en-US">
<head>
<style>
th,td{
border-bottom:3px solid #EAEAEA;
padding:6px 9px;
}
</style>
</head>
<body>
<h2>XML</h2>
<table cellspacing='0'><tr><th>Nom</th><th>Date</th><th>Poids</th></tr>
<tr><td><a href='https://test.com/fichier1.xml' target='_blank'>Lefichier1.xml</a><td>09 April 2019 10:00:00</td><td>1 KB</td></tr>
<tr><td><a href='https://test.com/fichier2.xml' target='_blank'>Lefichier2.xml</a><td>09 April 2019 10:00:00</td><td>1 KB</td></tr>
<tr><td><a href='https://test.com/fichier3.xml' target='_blank'>Lefichier3.xml</a><td>08 April 2019 10:00:00</td><td>1 KB</td></tr>
</html>
Et ce que j'aimerais en sortie c'est (disons que nous sommes le 9 avril aujourd'hui) :
https://test.com/fichier1.xml
https://test.com/fichier2.xml
J'espère avoir apporté plus de clarté Merci encore !
Ah oui et j'écrase le fichier d'origine pour un gain d'espace mais ce sera pour quand tout marchera bien, pour le moment je garde tout !
Hors ligne
#12 Le 24/04/2019, à 12:21
- pingouinux
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Tu peux essayer ceci :
dat="09 April 2019"
sed -rn "s,.*(https://[^']+).*<td>$dat .*,\1,p" maliste
Si tu veux utiliser la date du jour dans le même format :
$ dat=$(date +"%d %B %Y")
$ echo $dat
24 April 2019
Hors ligne
#13 Le 24/04/2019, à 14:19
- LeoMajor
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
bonjour,
date dépend de locale ; de fr à en
:~$ dat=$(env LC=ALL=C date +"%d %B %Y")
:~$ lynx -dump -list_inline /tmp/vrt/test.html | awk -v dt="$dat" 'BEGIN{FPAT="https.*\]|[0-9]{2} April 2019 [0-9:]+" }; /https/{if($2~dt){ sub(/]/,"",$1); print $1","$2 }} '
https://test.com/fichier2.xml,24 April 2019 10:00:00
il pourrait suffire, selon ce que tu veux faire ...
:~$ lynx -dump -listonly -nonumbers /tmp/vrt/test.html
https://test.com/fichier1.xml
https://test.com/fichier2.xml
https://test.com/fichier3.xml
Hors ligne
#14 Le 24/04/2019, à 16:28
- MicP
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
@LeoMajor
Bonjour
Dans la première ligne de commandes proposée,
il y a une petite erreur de frappe.
La ligne :
:~$ dat=$(env LC=ALL=C date +"%d %B %Y")
devrait être remplacée par :
:~$ dat=$(env LC_ALL=C date +"%d %B %Y")
Dernière modification par MicP (Le 24/04/2019, à 16:29)
Hors ligne
#15 Le 24/04/2019, à 18:56
- k3c
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
un petit exemple
$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from bs4 import BeautifulSoup
>>> html = """
... <!DOCTYPE html>
... <html lang="en-US">
... <head>
... <style>
... th,td{
... border-bottom:3px solid #EAEAEA;
... padding:6px 9px;
... }
... </style>
... </head>
... <body>
...
... <h2>XML</h2>
... <table cellspacing='0'><tr><th>Nom</th><th>Date</th><th>Poids</th></tr>
... <tr><td><a href='https://test.com/fichier1.xml' target='_blank'>Lefichier1.xml</a><td>09 April 2019 10:00:00</td><td>1 KB</td></tr>
... <tr><td><a href='https://test.com/fichier2.xml' target='_blank'>Lefichier2.xml</a><td>09 April 2019 10:00:00</td><td>1 KB</td></tr>
... <tr><td><a href='https://test.com/fichier3.xml' target='_blank'>Lefichier3.xml</a><td>08 April 2019 10:00:00</td><td>1 KB</td></tr>
... </html>
... """
>>> soup = BeautifulSoup(html,"lxml")
>>> print soup.prettify()
<!DOCTYPE html>
<html lang="en-US">
<head>
<style>
th,td{
border-bottom:3px solid #EAEAEA;
padding:6px 9px;
}
</style>
</head>
<body>
<h2>
XML
</h2>
<table cellspacing="0">
<tr>
<th>
Nom
</th>
<th>
Date
</th>
<th>
Poids
</th>
</tr>
<tr>
<td>
<a href="https://test.com/fichier1.xml" target="_blank">
Lefichier1.xml
</a>
</td>
<td>
09 April 2019 10:00:00
</td>
<td>
1 KB
</td>
</tr>
<tr>
<td>
<a href="https://test.com/fichier2.xml" target="_blank">
Lefichier2.xml
</a>
</td>
<td>
09 April 2019 10:00:00
</td>
<td>
1 KB
</td>
</tr>
<tr>
<td>
<a href="https://test.com/fichier3.xml" target="_blank">
Lefichier3.xml
</a>
</td>
<td>
08 April 2019 10:00:00
</td>
<td>
1 KB
</td>
</tr>
</table>
</body>
</html>
>>> for x in soup.table.findAll('a'):
... print x['href']
...
https://test.com/fichier1.xml
https://test.com/fichier2.xml
https://test.com/fichier3.xml
>>>
Debian 12 sur Thinkpad reconditionné
Hors ligne
#16 Le 24/04/2019, à 19:22
- k3c
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
ah j'ai zappé le test sur la date
Debian 12 sur Thinkpad reconditionné
Hors ligne
#17 Le 25/04/2019, à 11:25
- Tutobenne
Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable
Merci bcp à vous tous pour votre aide. J'ai finalement utilisé un grep pour obtenir uniquement ceux à la date souhaité :
grep -Po "href=.\Khttps://www.monsite.com.+?xml(?=.+date)
Merci encore
Hors ligne