Skocz do zawartości

Skrypt Bash Sed Grep Cat Przekierowanie Strumienia


DK.log

Rekomendowane odpowiedzi

Witam.

 

Całe popołudnie meczę się z pewnym skryptem.

 

Skrypt ma za zadanie:

 

1) pobrać 12 linijkę z kilkunastu / kilkudziesięciu plików tekstowych (dokładnie html)

2) wyciąć z tych linijek frazę <link rel="image_src" href=" (ew. x pierwszych znaków - w tym wypadku tabulator i 27 znaków łącznie ze spacjami

3) następnie na końcu takiej linijki zamienić frazę _m.jpg"> na .jpg (np. usunąć ostatnie 6 znaków i zastąpić je frazą .jpg albo poprostu wyciąć 5 i 6 znak od końca)

4) tak powstałe linijki (a w zasadzie linki) kolejno uruchomić jakimkolwiek downloader'em (np. KGet'em)

 

Jak dotąd udało mi się tylko wyodrębnić 12tą linijkę poleceniem:

sed -n '12p;12q' nazwa_pliku.html

 

Próbowałem dla ułatwienia przypisać ją do zmiennej poleceniem

MOJAZMIENNA=$(sed -n '12p;12q' nazwa_pliku.html)

Taką zmienna mogę od razu przekierować do nowego pliku poleceniem

echo $MOJAZMIENNA >> plik.txt

Później mógłbym pracować na nowym pliku np. sed'em i do obróbki tak powstałego pliku używać jakiś poleceń sed'a, które działają na każdym wierszu, ale manuale sed'a, które czytał sa dla mnie mało zrozumiałe i nie potrafię dobrać parametrów polecenia.

 

Nadal nie wiem też jak później taki skrypt uruchomić dla dowolnej ilości plików o tym samym rozszerzeniu.

 

Może ma ktoś jakiś pomysł, sugestię?? Dobrze i przystępnie opisanego sed'a??

 

Będę wdzięczny za jakąś pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

hmm, a moze

#!/bin/bash
for i in *.html; do
NAZWA=`head -n12 "$i" | tail -n1 | sed -e 's/<link rel="image_src"\ href="//g' -e 's/_m\.jpg/\.jpg/g'`
echo $NAZWA >> plik.txt

 

to, z jakimiś poprawkami powinno wyciągać pierwsze 12 linijek z pliku później z tych 12 wyciągnąć 1 ostatnią, teraz sed pierwsze polecenie usuwa ciąg znaków ...link... a drugie zamienia _m.jpg na samo .jpg, całość zapisuje do pliku ;]

zamiast listy (for i in *.html) można by wstawić np. zmienna $1, co dało by to że skrypt uruchomiony z parametrem określającym nazwę katalogu to z tego katalogu pobierał by pliki do obróbki, nie wiem jakie masz pliki więc czy dobrze jest to napisane to nie wiem:P

 

czas spać :P

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięx MaiKel.

 

Wiesz... wygląda bardzo sensownie i założę się, że powinno działać, ale jak zapisuje to do pliku i uruchamiam konsola wypisuje błąd:

./skrypt: line 5: syntax error: unexpected end of file

Skoro "plik zakończył się niespodziewanie" ;) to nie wiem, co czego w nim brakuje ;)

 

Dzięki za gotowca... mam nadzieje, że nie nadwyrężam?? :)

Odnośnik do komentarza
Udostępnij na innych stronach

Ok. Faktycznie brakowało done...

 

Dopiero zaczynam zabawę ze skryptami... wiem, że moje pytanie wydają się innym banalne... każdy kiedyś zaczynał...

 

To jest zawartość wygenerowanego pliku txt:

http://farm4.static.flickr.com/3104/2808289693_8798cc3865.jpg">
http://farm4.static.flickr.com/3038/2794251652_85faf28ea1.jpg">
<a href=http://farm4.static.flickr.com/3196/2843338440_d16ab1061b.jpg>link</a>

Jak widać chyba coś nie do końca działa jak trzeba...

Jakieś sugestię??

 

Szczerze, mówiąc pliki html były tylko dwa i pierwsze 2 linijki pochodzą właśnie z nich. Nie bardzo wiem skąd wzięła się trzecia linijka?

Jeśli o mnie chodzi to nie miałbym nic przeciwko gdyby każda linijka wyglądała jak ta trzecia.

Edytowane przez WalDo
Zmiana znmacznikow quote na code
Odnośnik do komentarza
Udostępnij na innych stronach

no spoko, fajnie że w miarę mi się udało bo nawet nie sprawdziłem czy to będzie działać myślałem że już sobie poradzisz jak dam ci taki przykład, ale skoro tak to wygląda to teraz można to przerobić jakoś, nie wiem, no może tak:

#!/bin/bash
for i in *.html; do
NAZWA=`head -n12 "$i" | tail -n1 | sed -e 's/<.*http:\/\//http:\/\//g' -e 's/.jpg.*/.jpg/g' -e "s/_m.jpg/.jpg/g"`
echo "$NAZWA" >> plik.txt; done

ale nie wiem czemu w wyniku wyszedł link z 3 kropkami...

Odnośnik do komentarza
Udostępnij na innych stronach

Link jest z trzema kropkami bo skróciło go już tu na forum... w pliku wynikowym jest bez kropek. Za chwilkę sprawdzę działanie twojego skryptu po modyfikacji i dam znać... tzn. nie tak za chwilkę bo skrypt php nie chce mi działać a na jutro muszę oddać projekt, więc jestem troszkę zajęty, ale dziękuje bardzo za pomoc i obiecuję kontynuacje tematu. Jeśli jesteś w stanie pomóc mi również z problemem dot. skryptu to napisz... chętnie wyślę Ci "flakon dobrego alko" w prezencie jeśli mi pomożesz z tym php'em...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...