2010-08-29 3 views
6

Possible en double:
RegEx match open tags except XHTML self-contained tagsObtenir texte à l'intérieur d'une balise HTML dans un fichier local avec grep

Extrait du fichier d'entrée

<TD class="clsTDLabelWeb" width="28%">Municipality:&nbsp;</TD> 
<TD style="WIDTH: 394px" class="clsTDLabelSm" colSpan="5"> 
<span id="DInfo1_Municipality">JUPITER</span></TD> 

Mon expression régulière

(?<=<span id="DInfo1_Municipality">)([^</span>]*) 

J'ai un fichier HTML enregistré sur le disque. Je voudrais utiliser grep pour rechercher dans le fichier et sortir le contenu d'une plage spécifique, bien que je ne sais pas si c'est une utilisation correcte de grep. Quand je lance grep sur le fichier avec l'expression lue depuis un autre fichier (donc je ne gâche pas les caractères spéciaux), il ne sort rien. J'ai testé l'expression dans RegExr et elle correspond à "JUPITER" qui est exactement ce que je veux retourner. Je vous remercie beaucoup pour votre aide!

Production Désirée

JUPITER 
+2

http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags/1732454 # 1732454 – msw

Répondre

1

Grep ne supporte pas ce type de regex (assertions arrières), et son un outil très pauvre pour cela, mais pour l'exemple donné est réalisable, cassera sous plusieurs situtions .

grep -io "<span id=\"DInfo1_Municipality\">.*</span>" file.htlm | grep -io ">[^<]*" | grep -io [^>]* 

quelque chose de fou comme ça, pas une bonne idée.

+0

Merci. J'avais le sentiment d'essayer de faire quelque chose que grep ne supportait pas. Il semblerait que je devrais faire de la programmation réelle. –

1
sed -n '/DInfo1_Municipality/s/<\/span.*//p' file | sed 's/.*>//' 
3

pour cette solution:

sed -n 's|^<span id="DInfo1_Municipality">\([^<]*\)</span></TD>$|\1|p' file 

ou avec GNU grep et votre regex:

grep -Po '(?<=<span id="DInfo1_Municipality">)([^</span>]*)' 
+0

Passer le drapeau -P à grep m'a permis de faire le lookbehind/lookahead que je recherchais. Merci pour le conseil – james

Questions connexes