11

我试图从 wget 的结果中提取一行,但遇到了麻烦。这是我的 wget 调用:

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

输出:

--18:24:12-- http://xxx.xxxx.xxxx:15000/myhtml.html
           => `-'
正在解决 xxx.xxxx.xxxx... xxx.xxxx.xxxx
正在连接到 xxx.xxxx.xxxx|xxx.xxxx.xxxx|:15000... 已连接。
已发送 HTTP 请求,等待响应...
  找到 HTTP/1.1 302
  日期:格林威治标准时间 2008 年 11 月 18 日星期二 23:24:12
  服务器:IBM_HTTP_Server
  过期:1994 年 12 月 1 日星期四 16:00:00 GMT
  位置:https://xxx.xxxx.xxxx/siteminderagent/...
  内容长度:508
  保活:超时=10,最大值=100
  连接:保持活动
  内容类型:文本/html;字符集=iso-8859-1
位置:https://xxx.xxxx.xxxx//siteminderagent/...
--18:24:13-- https://xxx.xxxx.xxxx/siteminderagent/...
           => `-'
解析 xxx.xxxx.xxxx... 失败:名称或服务未知。

如果我这样做:

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

它不会返回包含字符串的行。我只想检查站点或站点管理员是否已启动。

4

5 回答 5

19

您正在寻找的 wget 的输出写在 stderr 上。您必须重定向它:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 
于 2008-11-19T15:20:43.380 回答
9

wget将标头打印到标准错误,而不是标准输出。您可以将 stderr 重定向到 stdout,如下所示:

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

“2>&1”部分表示将 ('>') 文件描述符 2 (stderr) 重定向到文件描述符 1 (stdout)。

于 2008-11-19T15:23:13.903 回答
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 中捕获包含 302 的字符串的可能性(其中 html 文件本身输出 + 下载过程栏,结果字节数等):)

egrep -c计算匹配字符串的数量,而不是简单地输出它们。足以知道 egrep 匹配了多少字符串。

于 2011-02-03T16:38:09.407 回答
2

wget --server-response http://www.amazon.de/xyz 2>&1 | awk '/^ HTTP/{打印 $2}'

于 2014-05-20T13:26:07.470 回答
1

只是为了解释一下。原始问题中的-Sswitch 是--server-response.

另外,我知道指定的 OP wget,但curl类似并默认为 STDOUT 。

curl --head --silent $yourURL

或者

curl -I -s $yourURL

--silent只有-ability需要这个开关grep:(-s关闭进度%仪表)

于 2012-01-23T23:27:48.600 回答