2008-11-19 151 views
8

我試圖從wget的結果中提取一行,但遇到問題。 這是我的wget電話:從wget解析http響應標頭

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

輸出:

 
--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. 

如果我這樣做:

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

它不回我,包含字符串行。我只想檢查網站或網站管理員是否已啓動。

回答

15

您正在查找的wget的輸出寫在stderr上。你必須把它重定向:

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

wget打印頭到標準錯誤,而不是到stdout。您可以重定向標準錯誤到stdout如下:

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

的 「2> & 1」 的部分說來重定向( '>')文件描述符2(錯誤)到文件描述符1(標準輸出)。

+0

對@ Piotr的答案有很好的額外細節。 – 2008-11-19 15:24:07

2

已經提供溶液

wget的-SO- -T 1 -T 1 http://myurl.com:15000/myhtml.html 2> & 1>的/ dev/null的的位增強版本| grep -c 302

2>&1 >/dev/null將削減不需要的輸出。這種方式egrep將只解析wget的stderr,什麼消除了從stdout(其中html文件本身輸出+下載處理欄與結果字節計數等)的字符串捕獲的可能性:) :)

egrep -c計數匹配字符串的數量簡單地輸出它們。足夠知道多少字符串egrep匹配。

1

只是爲了說明一下。原始問題中的-S開關是--server-response的簡寫。

此外,我知道OP指定wget,但curl是類似的,默認爲STDOUT。

curl --head --silent $yourURL 

curl -I -s $yourURL 

僅需要grep -Ability的--silent開關:(-s關閉進度%計)

+0

某些服務器不響應頭部請求 – user3791372 2017-03-29 01:51:06