sed et expression reguliere

sed et expression reguliere - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 09-08-2012 à 09:29:01    

Bonjour à tous,
 
Je cherche à recuperer une valeur stockée dans un cookie (cookie généré par curl lors de al connexion).
 
Mon cookie se presente sous cette forme
 

Code :
  1. # Netscape HTTP Cookie File
  2. # http://curl.haxx.se/rfc/cookie_spec.html
  3. # This file was generated by libcurl! Edit at your own risk.
  4. #HttpOnly_echanges.insee.fr FALSE /upload TRUE 0 JSESSIONID BE8BB9E2025F20B580E3EBB27388E7B4
  5. echanges.insee.fr FALSE / FALSE 0 SERVERID 112


 
Je dois récupérer dans une variable la valeur de session (celle située après JSESSIONID
 
Je pense que sed ferait bien l'affaire, mais j'ai du mal à définir l'expression réguliere...
 
Il semblerait que cette chaine puisse être composée des caractères [A-Z][0-9] et qu'elle fasse 32 caractères de longueur
 
Pour la longueur je ne suis pas totalement sure.
 
Merci pour votre aide (encore !)

Reply

Marsh Posté le 09-08-2012 à 09:29:01   

Reply

Marsh Posté le 09-08-2012 à 10:24:25    

avec ton exemple

awk '/JSESSIONID/ { print $NF }' test.txt


fonctionne

 


oggy:~/Documents/tmp/regexp$ cat test.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_echanges.insee.fr FALSE       /upload TRUE    0 JSESSIONID BE8BB9E2025F20B580E3EBB27388E7B4
echanges.insee.fr FALSE / FALSE 0 SERVERID 112
oggy:~/Documents/tmp/regexp$ awk '/JSESSIONID/ { print $NF }' test.txt
BE8BB9E2025F20B580E3EBB27388E7B4


Message édité par o'gure le 09-08-2012 à 10:28:40
Reply

Marsh Posté le 09-08-2012 à 10:36:52    

Merci ca fonctionne bien !! et moi qui pensait deja à faire un truc tordu !!! par contre je vais regarder du coté du man awk pour comprendre ce que ca fait exactement ! (surtout le $NF) !!

Reply

Marsh Posté le 09-08-2012 à 10:49:43    

En résumé:
 - le /JSESSIONID/ permet de filtrer uniquement la ligne qui nous intéresse
 - $NF retourne le nombre de "champ" dans la ligne qu'il inspecte.
 - Le champ qui t'intéresse étant le dernier, ça fait l'affaire, on le sort avec le print

 

Il y a peut être plus simple, plus propre/robuste. Dans l'exemple, ça fonctionne

Message cité 1 fois
Message édité par o'gure le 09-08-2012 à 10:50:17
Reply

Marsh Posté le 09-08-2012 à 11:06:55    

merci pour ces précisions !!

Reply

Marsh Posté le 09-08-2012 à 16:24:00    

Si je peux abuser O'gure, aurais tu une idee pour récuperer dans ce fichier :
 

Code :
  1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="fr" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="keywords" lang="fr" content="Insee, upload"><meta name="description" lang="fr" content="Service de dépôt de fichiers"><title>Service de dépôt de fichiers</title><style type="text/css" media="all" title="Style Insee 3G">@import url("css/upload.css" );</style></head><body><div id="conteneur"><div id="entete"><div id="entete-logo"><div class="logo"><a href="http://www.insee.fr"title="Institut national de la statistique et des Etudes Economiques"accesskey="1"> <img src="css/images/logo_insee_pageint.gif"alt="Institut national de la statistique et des Etudes Economiques"title="Institut national de la statistique et des Etudes Economiques" /></a></div></div><div id="entete-titre">Service de dépôt de fichiers</div></div><div id="contenu"><h1>Rapport de t&eacute;l&eacute;chargement</h1>
  2. <hr/><p>Le t&eacute;l&eacute;chargement des fichiers s'est d&eacute;roul&eacute; sans erreur.</p><br/><table><tr class="header"><th>Fichier</th><th>Taille</th><th>Enregistr&eacute; sous</th><th>R&eacute;sultat</th></tr>
  3. <tr class="success"><td>INSEE_20120806_NB4.xml</td><td align="right">6418</td><td>brpp-62771--e-20120809_154943582.xml</td><td>Fichier correctement enregistré</td></tr></table><br/><p><a href="/upload/brpp?pdf=true&sessionLocal=8DDF9F1C42854613F01C2147E9FD4F12">Récupérer le bilan de vos transferts</a><p><p><a href="/upload/brpp">Déposer d'autres fichiers.</a><p><p><a href="/upload/brpp?logoff=true">Se déconnecter</a></p>


 
Uniquement la chaine : <p>Le t&eacute;l&eacute;chargement des fichiers s'est d&eacute;roul&eacute; sans erreur.</p> (avec ou sans la balise <p> </p> ???

Reply

Marsh Posté le 09-08-2012 à 16:46:05    

Quelle est la logique ?
Première ligne après "<h1>Rapport de t&eacute;l&eacute;chargement</h1> " ?

Reply

Marsh Posté le 09-08-2012 à 16:52:50    

oui ! en fait je recupere ce fichier avec curl, du coup pas possible de modifier la structure.

Reply

Marsh Posté le 09-08-2012 à 17:06:03    

à l'arrache, il y a moyen d'optimiser

awk '/Rapport de t/ { getline; print $0 }' test.txt | awk ' {sub(/.\/p.*/, "" ); print}' | awk '{print substr($0,9)}'|sed s/.eacute\;/é/g

 

La logique est :
Je récupère la ligne suivant "Rapport de t"
http://www.cyberciti.biz/faq/awk-p [...] ing-regex/

oggy:~/Documents/tmp$ awk '/Rapport de t/ { getline; print $0 }' test.txt
<hr/><p>Le t&eacute;l&eacute;chargement des fichiers s'est d&eacute;roul&eacute; sans erreur.</p><br/><table><tr class="header"><th>Fichier</th><th>Taille</th><th>Enregistr&eacute; sous</th><th>R&eacute;sultat</th></tr>


J'extrais une première partie en me basant sur une expression régulière
http://superuser.com/questions/401 [...] -using-awk

oggy:~/Documents/tmp$ awk '/Rapport de t/ { getline; print $0 }' test.txt | awk ' {sub(/.\/p.*/, "" ); print}'
<hr/><p>Le t&eacute;l&eacute;chargement des fichiers s'est d&eacute;roul&eacute; sans erreur.

 

J'enlève les 9 premiers caractères
http://star-www.rl.ac.uk/docs/sc4.htx/node38.html

oggy:~/Documents/tmp$ awk '/Rapport de t/ { getline; print $0 }' test.txt | awk ' {sub(/.\/p.*/, "" ); print}' | awk '{print substr($0,9)}'
Le t&eacute;l&eacute;chargement des fichiers s'est d&eacute;roul&eacute; sans erreur.

 


et pour remplacer &eacute; par é

oggy:~/Documents/tmp$ awk '/Rapport de t/ { getline; print $0 }' test.txt | awk ' {sub(/.\/p.*/, "" ); print}' | awk '{print substr($0,9)}'|sed s/.eacute\;/é/g
Le téléchargement des fichiers s'est déroulé sans erreur.


Message édité par o'gure le 09-08-2012 à 17:11:44
Reply

Marsh Posté le 09-08-2012 à 17:16:55    

Merci encore O'gure ! faut vraiment que je me mette à awk !!!

Reply

Marsh Posté le 09-08-2012 à 17:16:55   

Reply

Marsh Posté le 09-08-2012 à 17:24:51    

En un poil plus petit et sans sed:

awk '/Rapport de t/ { getline;
          sub(/.\/p.*/, "" );
          gsub(/.eacute\;/, "é" );
          print substr($0,9) }'   test.txt


Message édité par o'gure le 09-08-2012 à 17:25:05
Reply

Marsh Posté le 10-08-2012 à 09:25:18    

o'gure a écrit :

En résumé:
...
 - $NF retourne le nombre de "champ" dans la ligne qu'il inspecte.
...
 
Il y a peut être plus simple, plus propre/robuste. Dans l'exemple, ça fonctionne


 
C'est pas plutôt NF qui retourne le nombre de champs dans la ligne qu'il inspecte, $NF retourne la valeur du NFième champ :??:


---------------
"Il a inventé le bougisme : je bouge donc je suis" :sol: - Dupont-Aignan à propos de Son Altesse Sérénissime Sarkal 1er. Merci Handsome Devil et Meriadeck.
Reply

Marsh Posté le 10-08-2012 à 10:06:26    

FranceDenBas a écrit :

C'est pas plutôt NF qui retourne le nombre de champs dans la ligne qu'il inspecte, $NF retourne la valeur du NFième champ :??:


Si c'est ça :o
Désolé de mon approximation [:whatde]

Reply

Marsh Posté le 10-08-2012 à 23:09:50    

o'gure a écrit :


Si c'est ça :o
Désolé de mon approximation [:whatde]


 
Y'a pas de mal. :o


---------------
"Il a inventé le bougisme : je bouge donc je suis" :sol: - Dupont-Aignan à propos de Son Altesse Sérénissime Sarkal 1er. Merci Handsome Devil et Meriadeck.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed