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:
lub:
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?
Pozdr
awiam.
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.