使用sed从wget读取网站的字节数

时间:2015-10-15 02:31:26

标签: linux bash sed wget

我试图只打印wget命令的一小部分输出。如果我输入

wget http://google.com --spider --server-response

我收到一个很长的输出列表到我要搜索的终端。其中一行是

Content-Length: 219

我想要做的就是读取并打印出数字219到标准输出。我在另一个堆栈溢出线程(get file size of a file to wget before wget-ing it?

上找到了答案
wget http://google.com --spider --server-response -O - 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}'

我在理解这个命令时遇到两个主要困难。我希望有人可以向我详细解释这两件事。

  1. sed通常需要一个输入文件吗?管道wget命令的输出不会使其成为文件。怎么没有这个呢?

  2. 我不明白-e的意思。我查了一下linux手册页,它提到它是为了“脚本”?这个标志很重要,因为没有它,没有任何作用。这是什么意思?此外,命令的其余部分发生了什么,以及如何打印出数字?

  3. 很抱歉问一个以前回答的问题,但我没有找到任何有意义的解释,我想尝试使用替代解决方案!

2 个答案:

答案 0 :(得分:5)

  

sed通常需要一个输入文件吗?管道wget命令的输出并不能使其成为文件。怎么没有这个呢?

与大多数Unix实用程序一样,sed将处理文件,如果它们作为参数提供,否则它将处理其标准输入。

  

我不明白 - 是什么意思。我查了一下linux手册页,它提到它是用于"脚本" ?这意味着什么?另外,引号行中发生了什么?

-e用于表示下一个参数是要执行的sed个操作的字符串(文档称之为"脚本")。这是sed的第一个参数的默认值,但是您获得的脚本恰好使用了它。当您提供多个命令时,它最有用,因为如果您在其他命令之前没有使用-e,那么它们将被视为文件名。另见

what does dash e(-e) mean in sed commands?

在您的命令中,-n选项意味着默认情况下sed不应打印其输入行 - 您将使用p操作明确打印所选行。 /Content-Length/匹配包含该字符串的行,然后是在{}中对这些匹配行执行的一组操作。第一个操作是s/.*: //,它将所有内容替换为:以及后面的空格。第二个操作是p,它打印修改后的行。这样就可以在Content-Length:之后输出数字。

答案 1 :(得分:1)

您仍然可以将sed命令(wget -O不需要,sed -e不需要)减少到:

wget http://google.com --spider --server-response 2>&1 | sed -n '/Content-Length/{s/.*: //;p}'

此处,将STDERR重定向到STDOUT并让sed对其进行操作。 sed命令的作用是,它禁止打印(-n),然后对于包含Content-Length的行,从头开始删除所有字符,包括:和{{1} }。然后打印修改后的行(space中的p)。

sed相同:

awk

对于包含wget http://google.com --spider --server-response 2>&1 | awk '/Content-Length/{print $2}' 的行,打印第二个字段(将是数字部分)。