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 23/04/2019, à 15: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, à 15: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, à 16: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 smile (même si oui en effet je cherche à télécharger un xml)

Hors ligne

#4 Le 23/04/2019, à 16: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


Archlinux sur Xiaomi Air 13

Hors ligne

#5 Le 23/04/2019, à 16:33

Tutobenne

Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable

k3c a écrit :

avec un parser Html comme BeautifilSoup, ça sera court et plus fiable.

si ton site n'est pas confidentiel

Malheureusement il l'est sad
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, à 16: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, à 17:20

k3c

Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable


Archlinux sur Xiaomi Air 13

Hors ligne

#8 Le 23/04/2019, à 17:34

k3c

Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable


Archlinux sur Xiaomi Air 13

Hors ligne

#9 Le 24/04/2019, à 11: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 sad

Hors ligne

#10 Le 24/04/2019, à 11: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, à 12:21

Tutobenne

Re : Saut de ligne dans mon fichier et stockage d'un sed dans une variable

pingouinux a écrit :

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é smile 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, à 13: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, à 15: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, à 17: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, à 17:29)

Hors ligne

#15 Le 24/04/2019, à 19: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
>>> 

Archlinux sur Xiaomi Air 13

Hors ligne

#16 Le 24/04/2019, à 20: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


Archlinux sur Xiaomi Air 13

Hors ligne

#17 Le 25/04/2019, à 12: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 wink

Hors ligne