PDA

View Full Version : comando per estrarre testo


Michele81
12-07-2005, 17:53
Ciao!

stavo cercando un comando linux per estrarre testo da un html, indicandogli solamente l'inizio e la fine del pezzo da estrarre.

Esempio:
"<codice html da eliminare>pezzo da estrarre<codice html da eliminare>"

Ho provato con sed, ma non riesco ad ottenere risultati (e non so neanche se è adatto allo scopo)....

Michele81
13-07-2005, 11:38
Nessuno che mi riesce a dare una mano? ;)

bionicoz
13-07-2005, 13:25
man sed && RTFM && google.


magicmushrooms ~ # cat io
<html>questo</html> <html>questo</html>
<html>dovrebbe</html>
<html>andare</html>
<html>bene</html>
<html>no?</html>
magicmushrooms ~ # sed -e 's/<html>//g' -e 's/<\/html>//g' io
questo questo
dovrebbe
andare
bene
no?
magicmushrooms ~ #



-e per eseguire più di un comando alla volta, s sta per substitute, cosa? quello che c'è dopo lo /, con cosa? con quello che c'è dopo il secondo / (nulla nel nostro caso) g indica che deve sostituire tutte le occorrenze per riga, io è il file che devi processare. Spero di esserti stato utile, Bio.

kingv
13-07-2005, 13:43
in alternativa
sed -e 's/<codice html da eliminare>\(.*\)<codice html da eliminare>/\1/' file_html


se però l'html ha anche altri tag devi modificarlo per farglieli eliminare

kingv
13-07-2005, 13:46
man sed && RTFM && google.



ha detto che ha usato sed ma non è riuscito a venirne a capo, un forum serve per chiedere no? ;)

bionicoz
13-07-2005, 14:02
kingv, hai ragione, ma il fatto è che fino a 5 minuti fa nemmeno io avevo mai usato sed. In ogni caso scusa Michele81, evterò gli rtfm sul forum.. (ma li conserverò per irc... muhahah come sono bofh!!! :D)

Michele81
13-07-2005, 15:44
kingv, hai ragione, ma il fatto è che fino a 5 minuti fa nemmeno io avevo mai usato sed. In ogni caso scusa Michele81, evterò gli rtfm sul forum.. (ma li conserverò per irc... muhahah come sono bofh!!! :D)

La mia frase iniziale

"Ho provato con sed, ma non riesco ad ottenere risultati (e non so neanche se è adatto allo scopo)...."

lasciava intendere che un po' con sed ci ho smanettato.
Dell'esempio che hai riportato tu ne è pieno il web, e tratta una semplice sostituzione, una per ogni colonna...non ti è forse venuto il dubbio che ci abbia già provato? :stordita: ;)

Tranquillo per il rtfm ;)

@kingv: stasera provo il tuo

Ciao!

kingv
13-07-2005, 16:55
La mia frase iniziale
@kingv: stasera provo il tuo


la soluzione che ti ho postato prima non va bene, perchè si limita a sostituire a <tag>xxx<tag> la stringa contenuta tra i due delimitatori.


penso che quello che cerchi sia qualcosa del tipo:

sed -n -e 's/.*<tag_inizio>\(.*\)<tag_fine>.*/\1/p' nome_file

kingv
13-07-2005, 17:04
ripensandoci se i tag <tag_inizio> e <tag_file> sono su righe diverse non funziona nemmeno così :what: , provo a sistemartelo domani perchè sto uscendo.

Michele81
13-07-2005, 17:06
la soluzione che ti ho postato prima non va bene, perchè si limita a sostituire a <tag>xxx<tag> la stringa contenuta tra i due delimitatori.


penso che quello che cerchi sia qualcosa del tipo:

sed -n -e 's/.*<tag_inizio>\(.*\)<tag_fine>.*/\1/p' nome_file

Perfetto!!!! :D :D

Grazie mille! :mano:

kingv
13-07-2005, 17:17
Perfetto!!!! :D :D

Grazie mille! :mano:


bene ;)


tieni conto che se hai nel tuo file delle situazioni tipo:

<tag_inizio>xxx
<tag_fine>


(cioè su due righe diverse) non funziona :O