Strona 1 z 1

Wycięcie tekstowych danych grep lub sed?

: 01 maja 2009, 22:21
autor: spthcl
Witam.

Ostatnio chciałem zabrać się za coś nowego i postanowiłem wyciąć źródło ze strony, niestety nie wiem jak?

Próbowałem z grepem i regexpem, jednak nic nie wychodzi.

¬ródło wyciągam tą komendą:

Kod: Zaznacz cały

curl --silent --user-agent 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' --url 'http://translate.google.com/translate_t' --data 'prev=hp&hl=pl&js=n&text=clock&sl=en&tl=pl'
W źródle string wygląda tak:

Kod: Zaznacz cały

<div id="result_box" dir="ltr">zegar</div>
lub:

Kod: Zaznacz cały

<div id=result_box dir="ltr">zegar</div>
Chciałbym wyciąć wyraz "zegar".

Bardzo proszę o pomoc.

Pozdrawiam.

: 01 maja 2009, 22:52
autor: jedi1
http://tldp.org/LDP/abs/html/string-manipulation.html

Tutaj masz napisane jak używać regexpów w bashu.

Nie musisz używać seda.

: 01 maja 2009, 22:55
autor: ponton

Kod: Zaznacz cały

sed -e "s/<div id=\"\?result_box\"\? dir=\"ltr\">\(.*\)<\/div>/\1/g"

: 01 maja 2009, 22:56
autor: spthcl
Dziękuje wam bardzo! ;-)

//Aha, ponton, nie działa mi twój zapis.

: 01 maja 2009, 23:06
autor: ponton

Kod: Zaznacz cały

$ sed -e "s/<div id=\"\?result_box\"\? dir=\"ltr\">\(.*\)<\/div>/\1/g"
<div id="result_box" dir="ltr">zegar</div>
zegar
<div id=result_box dir="ltr">zegar</div>
zegar
U mnie działa. ;)

EDIT: Ach... zapomniałem o globalnych .* po obu stronach:

Kod: Zaznacz cały

 sed -e "s/.*<div id=\"\?result_box\"\? dir=\"ltr\">\(.*\)<\/div>.*/\1/g"

: 01 maja 2009, 23:11
autor: spthcl
ponton, dziękuję za ,,gotowca'' miło z twojej strony, a co powiesz na to?

Kod: Zaznacz cały

curl --silent --user-agent 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' --url 'http://translate.google.com/translate_t' --data 'prev=hp&hl=pl&js=n&text=ball&sl=en&tl=pl' | grep -o "<div id=result_box dir=\"ltr\">[A-Za-z]*<\/div>" | sed -e 's/<[^>]*>//g'
Takie coś było dla mnie ,,łatwiejsze'', co więc lepsze?

Pozdrawiam.

Edit:
Z twojego dalej całe bloki tekstu dostaję:

Kod: Zaznacz cały

curl --silent --user-agent 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' --url 'http://translate.google.com/translate_t' --data 'prev=hp&hl=pl&js=n&text=ball&sl=en&tl=pl' | sed -e "s/.*<div id=\"\?result_box\"\? dir=\"ltr\">\(.*\)<\/div>.*/\1/g"

Kod: Zaznacz cały

<html><head><title>Tekst i sieć - Google Tłumaczenie</title><style type="text/css"><!--                                                                                             
a:link,.q:visited,.q:link,.q:active{color:#00c}                                                                                                                                     
a:visited{color:#551a8b}                                                                                                                                                            
a:active{color:#f00}                                                                                                                                                                
.tabbar{background-color:#e5ecf9}                                                                                                                                                   
.tab{background-color: #e5ecf9;border-bottom:1px solid #36c;padding:0 1.3em;font-weight:bold;white-space:nowrap;font-family:arial,sans-serif;font-size:83%}                         
.active{background-color:#fff;color:#000;border:1px solid #36c;border-bottom:1px solid #fff}                                                                                        
.tab_footer{border-top:1px solid #ccc;padding-top:1em;width:98%}                                                                                                                    
--></styl.
...
itd.

: 01 maja 2009, 23:20
autor: ponton
spthcl pisze:Z twojego dalej całe bloki tekstu dostaje :)
No tak, zawsze bierze największe dopasowanie...

Powinno być dobrze:

Kod: Zaznacz cały

sed -e "s/.*<div id=\"\?result_box\"\? dir=\"ltr\">\([a-zA-Z]*\)<\/div>.*/\1/g"

: 01 maja 2009, 23:26
autor: spthcl
Prawie.

Dziękuję w każdym razie.