[solved] sed i kasowanie textu z linii
: 22 lip 2009, 18:17
witam,
ostatnio z okazji zmiany pulpitu (
) postanowiłem trochę rozszerzyć funkcjonalność mojego conky'ego. W tym celu zabrałem się za napisanie skryptu w bashu, który będzie mi pobierał listę tytułów anime z stronki http://animecalendar.net. Niestety stronka nie ma RSS'a do tego, więc trzeba było stworzyć jako taki parser. Jedynymi narzędziami do tego jakie znam (w sensie, że słyszałem, że są) to awk i sed, ale z drugiego już korzystałem, więc wybór był oczywisty
jakby jednak ktoś miał jeszcze coś innego, ciekawszego to chętnie spróbuje.
W każdym bądź razie, trzeba przejść do sedna
W chwili obecnej stworzyłem takiego skrypta :
Wiem, że obecny skrypt, nie jest idealny i się wysypie przy 30/31 dniu miesiąca, ale tym się będę bawił, jak już wszystko będzie działać
sama stronka nie jest zbyt idealnie napisana, więc trochę więcej z nią problemów było niż mi się wydawało, ale dzięki temu co napisałem otrzymuję taki wynik :
W sumie to już chyba niedaleka droga
w porównaniu do tego co było na początku
W każdym bądź razie, chciałbym, żeby efekt końcowy wyglądał tak :
Jednak tutaj pojawia się problem, ponieważ nie potrafię za pomocą sed'a wyłuskać coś z linii. Sposoby widzę dwa, albo przeczytać początkowe znaki do i reszte cropnąć lub cropnąć wszystko do napotkania znaku ">". Z tutoriali, z których korzystałem, nie wiele było wydobywaniu textu z linii.
Byłbym wdzięczny jakby ktoś podrzucił pomysł lub wskazał mi chociaż kierunek
ostatnio z okazji zmiany pulpitu (


W każdym bądź razie, trzeba przejść do sedna

Kod: Zaznacz cały
#!/bin/bash
web=http://animecalendar.net/
dzien=$(date +%d)
#print lines between $dzien and $dzien+1
curl $web | sed -n "/>$dzien</,/>$(($dzien+1))</p" | \
#delete whitespace at beginning and ending of the line
sed 's/^[ \t]*//;s/[ \t]*$//' | \
#delete last line
sed '$d' | \
#strip file from html tags
sed -e 's#<[^>]*>##g' | \
#delete line with matching pattern=src
sed '/src/d' | \
#delete blank/empty lines
sed '/./!d' | \
#delete first two lines
sed '1,2d' | \
#add white line when pattern is matched
sed '/>/G' | \
#print only lines with more than 2 chars
sed -n '/^.\{2\}/p'
exit

Pod ciachem kryje się sam text, nic za co by się można było zaczepić, więc nie potrzebny jest w ogóle.Spice and Wolf II 00:00 TV Kanagawa " style="color: #fff; font-size:10px;" target="_blank" id="font_4873_3">Spice and Wolf II
Ep: 3
Sweet Blue Flowers Fumi Manjoume, an introverted... [ciach] ...other get through them.00:00 Fuji TV " style="color: #fff; font-size:10px;" target="_blank" id="font_4720_4">Sweet Blue Flowers
Ep: 4
Umi Monogatari ~Anata ga Ite Kureta Koto~ The story centers on Marin and Urin ... [ciach] ... by an enveloping darkness.00:00 CBC " style="color: #fff; font-size:10px;" target="_blank" id="font_5110_5">Umi Monogatari ~Anata ga Ite Kureta Koto~
Ep: 5
Umineko no Naku Koro ni Umineko no Naku Koro ni takes place ...[ciach] ... murdered.00:00 Chiba TV " style="color: #fff; font-size:10px;" target="_blank" id="font_4742_4">Umineko no Naku Koro ni
Ep: 4
W sumie to już chyba niedaleka droga


Kod: Zaznacz cały
Spice and Wolf II
Ep: 3
Sweet Blue Flowers
Ep: 4
Umi Monogatari ~Anata ga Ite Kureta Koto~
Ep: 5
Umineko no Naku Koro ni
Ep: 4
Byłbym wdzięczny jakby ktoś podrzucił pomysł lub wskazał mi chociaż kierunek
