2011-09-29 13 views
10

Sto cercando di recuperare il contenuto della tabella da un messaggio di errore. Ho bisogno del contenuto ma non dei tag <tr></tr>. Non ho nemmeno bisogno di "tr" o "td" solo il contenuto. per esempio:Elimina tag html in sed o simili

<td> I want only this </td> 
<tr> and also this </tr> 
<TABLE> only texts/numbers in between tags and not the tags. </TABLE> 

anche Vorrei mettere la prima uscita colonna come questo in un nuovo file csv column1, Info1, info2, Info3 coumn2, Info1, info2, Info3

Ho provato sed ai cancellatori cancellati <tr><td> ma quando prendo tabella ci sono anche altri tag come <color><span> ecc. quindi voglio cancellare tutti i tag; insomma tutto con < e>.

+1

Quanto è regolare il contenuto? Potresti essere in grado di usare ['lynx'] (http://lynx.browser.org/) per afferrare la pagina e convertirla in testo e quindi analizzare il testo normale. Difficile dire senza ulteriori dettagli, lo scraping dello schermo tende ad essere una scelta tra vari brutti hack. –

+0

ok questo ha risolto il primo problema ** sed -e 's/<.*> // g' input **. e al commento sopra ho wget'ed le pagine e ho raschiato solo la parte del tavolo. quindi il file contiene solo tag e dati di tabelle puliti. qualcosa come una routine per gli orari degli esami. – user913492

risposta

17

sed 's/<[^>]\+>//g' rimuoverà tutti i tag, ma è possibile sostituirli con uno spazio in modo che i tag uno accanto all'altro non vengano eseguiti insieme: <td>one</td><td>two</td> diventa: onetwo. Quindi potresti fare sed 's/<[^>]\+>/ /g' quindi produrrebbe one two (beh, in realtà one two).

Detto questo, a meno che non sia necessario il solo testo non elaborato, e sembra che stiate cercando di eseguire alcune trasformazioni sui dati dopo aver rimosso i tag, un linguaggio di scripting come Perl potrebbe essere uno strumento più adatto per fare queste cose.

Dato che mu è troppo corta, lo scraping HTML può essere un po 'rischioso, usare qualcosa che effettivamente analizza l'HTML per te sarebbe il modo migliore per farlo. PHPs DOM API è abbastanza buono per questo tipo di cose.

+0

grazie .. che è stato utile .. – user913492

2

Originale:

Mac Terminal REGEX si comporta in modo leggermente diverso. Sono stato in grado di fare questo sul mio Mac utilizzando il seguente esempio:

$ curl google.com | sed 's/<[^>]*>//g' 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 219 100 219 0  0 385  0 --:--:-- --:--:-- --:--:-- 385 

301 Moved 
301 Moved 
The document has moved 
here. 

$ bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Edit:

Solo per amor chiarimento originale sembrava:

$ curl googl.com 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 

Anche il ricciolo di testa fastidioso può essere liberarsi dell'uso dell'opzione -s:

$ curl -s google.com | sed 's/<[^>]*>//g' 

301 Moved 
301 Moved 
The document has moved 
here. 

$