[bash] grep sur des lignes très longues, souci

grep sur des lignes très longues, souci [bash] - Shell/Batch - Programmation

Marsh Posté le 13-12-2011 à 10:22:57    

Bonjour à tous !
 
Je suis en train de coder un petit script bash qui doit parser le contenu d'une page html pour y retrouver certains motifs (des séquences de nombres) planqués dans des div.
Jusqu'aujourd'hui, je faisais simplement un grep sur la page en y cherchant la séquence de nombres, puis un sed sur chaque ligne pour en retirer tout ce qui ne m'intéressait pas.
 
La page que je parse a changé, et maintenant, dans la source du .htm, l'intégralité des balises dans lesquelles je recherche mes séquences se retrouve sur une seule ligne de plus de 59000 caractères, le dev a visiblement omis d'intégrer des retours chariot...
 
Du coup, grep perd complètement les pédales et renonce au-delà de 16000 caractères environ.
Une solution pour faire le boulot ? Je suis un peu perdu...
 
Merci !

Reply

Marsh Posté le 13-12-2011 à 10:22:57   

Reply

Marsh Posté le 13-12-2011 à 10:56:06    

salut,
 
pourquoi utiliser grep ? utilise directement sed !

Reply

Marsh Posté le 13-12-2011 à 11:33:43    

Salut et merci pour ta réponse :)
 
grep à l'origine parce que j'utilisais le script pour contrôler sur la sortie console les patterns qu'il trouvait. Aussi parce que sed, une fois sorti du substitute, je suis un peu perdu. Je crois comprendre que je peux utiliser la commande insertion pour insérer des trucs après un pattern détecté, mais je ne sais pas comment lui faire passer un retour chariot. Il faut l'échapper d'une manière ou d'une autre ?
 
En gros, si j'ai une source du genre :

Citation :

<html>
 
[balises head, meta, début du body...]
 
[plein de balises à la con]0123456789[plein de balises à la con]9876543210[plein de balises à la con]
 
[fin du body...]
</html>


 
À quoi va ressembler mon sed pour extraire, sur une sortie de n lignes, les n patterns de chiffres trouvés sur la ligne unique du dessus ?
 
Merci beaucoup :)

Reply

Marsh Posté le 13-12-2011 à 16:06:20    

regarde si ça te va

Code :
  1. sed '/\][0-9]\{10\}\[/! d; s/\[[^]]*\]/ - /g' fichier.html

enfin l'idée, c'est :
si il n'y a pas 10 caractères numériques qui se suivent sur la ligne, elle est effacée (d - delete)
dans le cas contraire, on substitue tout ce qui est entre crochets, crochets compris (pour l'exemple donné) par <espace>-<espace>

Reply

Marsh Posté le 13-12-2011 à 22:32:24    

Ça fonctionne proprement, merci bien à toi :)

Reply

Sujets relatifs:

Leave a Replay

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