2017-07-05 1 views
0

(Xubuntu 16.04.2 x86_64) J'essaye d'analyser un fichier html et d'en saisir des valeurs. J'ai besoin tout le code extrait entre cetteSed Extrait entre deux modèles d'abord correspondant

<tr style="text-align: center; background:#FFF"> 

et ce

</td></tr> 

Le problème, est que je suis en cela par une boucle pour saisir 800 de ces sections, mais la première fois qu'il court qu'il trouve la première chaîne correctement mais elle utilise la dernière correspondance dans le fichier au lieu de la suivante de la première chaîne.

Je génère chaque find dans un fichier texte et le premier combine chaque entrée qui n'est pas ce dont j'ai besoin, j'ai besoin de fichiers individuels pour chaque entrée.

Au lieu d'utiliser cette chaîne compliquée, disons que j'ai cette html

<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 

J'utilise ce code

sed 1,/<div>/,/<\/div>/!d' sourcefile > output 

Mais cette commande avec donner l'intégralité du fichier au lieu de choisir le premier match Je préférerais utiliser sed que awk, grep, ou perl si possible.

+0

* à travers une boucle pour saisir 800 de ces sections * - * J'ai besoin des fichiers individuels pour chaque entrée * - de sorte que vous voulez obtenir 800 fichiers? – RomanPerekhrest

+0

Oui, mais je peux coder cette partie, ce n'est pas pertinent pour le moment. – knuxyl

+0

c'est facile avec ** Python ** – RomanPerekhrest

Répondre

0

Si vous insistez sur sed, cela devrait faire l'affaire (si je comprends bien votre question):

sed -n '/<div>/,/<\/div>/ { /<\/*div>/d; p }' file 

Depuis ERE POSIX (regex étendu) est toujours avide, la plage d'adresses /<div>/,/<\/div>/ sera toujours capture consécutive div s. La commande que nous exécutons sur ces blocs supprime simplement les (externes) <div> et </div>; imprimer tout le reste.

Pour l'entrée file:

a 
<div> 
    1 
</div> 
b 
<div> 
    2 
</div> 
c 
<div> 
    3 
</div> 
d 

sortie est:

1 
    2 
    3