2008-11-19 12 views
8

Próbuję wyodrębnić linię z wyniku wget, ale mam z tym problem. To moje wezwanie wget:parsuj nagłówek odpowiedzi http od wget

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 

wyjściowa:

 
--18:24:12-- http://xxx.xxxx.xxxx:15000/myhtml.html 
      => `-' 
Resolving xxx.xxxx.xxxx... xxx.xxxx.xxxx 
Connecting to xxx.xxxx.xxxx|xxx.xxxx.xxxx|:15000... connected. 
HTTP request sent, awaiting response... 
    HTTP/1.1 302 Found 
    Date: Tue, 18 Nov 2008 23:24:12 GMT 
    Server: IBM_HTTP_Server 
    Expires: Thu, 01 Dec 1994 16:00:00 GMT 
    Location: https://xxx.xxxx.xxxx/siteminderagent/... 
    Content-Length: 508 
    Keep-Alive: timeout=10, max=100 
    Connection: Keep-Alive 
    Content-Type: text/html; charset=iso-8859-1 
Location: https://xxx.xxxx.xxxx//siteminderagent/... 
--18:24:13-- https://xxx.xxxx.xxxx/siteminderagent/... 
      => `-' 
Resolving xxx.xxxx.xxxx... failed: Name or service not known. 

jeśli mogę to zrobić:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html | egrep -i "302" <br/> 

To robi wrócić mi wiersz zawierający ciąg. Chcę tylko sprawdzić, czy strona lub siteminder jest gotowy.

Odpowiedz

15

Dane wyjściowe wget, którego szukasz, jest napisane na stderr. Musisz go przekierować:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 
8

wget wypisuje nagłówki na stderr, a nie na standardowe wyjście. można przekierować stderr do stdout następująco:

wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 

W "2> & 1" część mówi przekierować ('>') plik deskryptora 2 (stderr) do pliku deskryptora 1 (stdout).

+0

Dobry dodatkowy szczegół do odpowiedzi @ Piotra. –

2

Trochę udoskonalona wersja już dostarczonych rozwiązania

wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2> & 1>/dev/null | grep -c 302

2>&1 >/dev/null będzie przycinać niepotrzebne wydruki. W ten sposób egrep przeanalizuje tylko stdr wget, co eliminuje możliwość przechwytywania ciągów zawierających 302 ze stdout (gdzie wypisywany jest sam plik html + pasek postępu pobierania z wynikową liczbą bajtów itp.) :)

egrep -c zlicza liczbę dopasowanych ciągów po prostu je wyprowadzać. Wystarczająco dużo, aby wiedzieć, ile pasuje egrep do siebie.

1

Wystarczy trochę wyjaśnić. Przełącznik -S w pierwotnym pytaniu jest skrótowy pod numerem --server-response.

Ponadto wiem, że OP określony wget, ale curl jest podobny i domyślnie STDOUT.

curl --head --silent $yourURL 

lub

curl -I -s $yourURL 

Przełącznik --silent jest potrzebna tylko dla grep -Możliwość: (-s wyłącza postępu% m)

+0

niektóre serwery nie odpowiadają na żądanie head – user3791372