2010-08-29 11 views
6

Eventuali duplicati:
RegEx match open tags except XHTML self-contained tagsOttenere testo da all'interno di un tag HTML all'interno di un file locale con grep

Estratto da file di input

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

mia espressione regolare

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

Ho un file HTML salvato su disco. Vorrei usare grep per cercare attraverso il file e produrre il contenuto di uno span specifico, anche se non so se questo è un uso corretto di grep. Quando eseguo grep sul file con l'espressione letta da un altro file (quindi non rovino l'escape di caratteri speciali), non emette nulla. Ho testato l'espressione in RegExr e corrisponde a "JUPITER", che è esattamente ciò che voglio restituire. Grazie mille per il vostro aiuto!

uscita desiderata

JUPITER 
+2

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

risposta

1

Grep non supporta quel tipo di regex (lookbehind asserzioni), ed è un pessimo strumento per questo, ma per l'esempio dato è praticabile, si rompe sotto molti situtions .

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

qualcosa di pazzo del genere, non è una buona idea.

+0

Grazie. Ho avuto la sensazione che stavo cercando di fare qualcosa che grep non supportava. Sembra che dovrò fare un po 'di programmazione vera e propria. –

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

dare una prova:

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

o con GNU grep e la vostra espressione regolare:

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

Passare il flag -P a grep mi ha permesso di eseguire il lookbehind/lookahead che cercavo. Grazie per il consiglio – james

Problemi correlati