2015-10-15 24 views
0

我试图只打印wget命令输出的一小部分。如果我键入使用sed从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手册页,它提到它是用于“脚本”的?这个标志很重要,因为没有它,没有任何工作。这是什么意思?另外,命令的其余部分发生了什么,以及如何打印出数字?

对不起,问一个先前回答的问题,但我还没有找到上线是有道理的任何解释,我想尝试用另一种解决方案这样做!

回答

5

sed通常需要输入文件吗?管理wget命令的输出不会使其成为文件。如果没有这个,它如何运作?

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

我不明白什么-e的意思。我查过了linux手册页,它提到它是用于“脚本”的?这意味着什么?另外,引号中的内容会发生什么?

-e用于指示下一个参数是sed操作的字符串来执行(该文件称这是一个“脚本”)。这是sed的第一个参数的默认值,但您碰巧明确使用了该脚本。当你给出多个命令时,这是非常有用的,因为如果在附加命令之前没有使用-e,它们将被视为文件名。另请参见

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

在你的命令中,-n选项意味着sed不应该被默认打印其输入线 - 你将使用p操作明确打印选定行。 /Content-Length/与包含该字符串的行匹配,然后在{}的这些匹配行上执行一组操作。第一个操作是s/.*: //,它将一切都替换为:以及后面的空格。第二个操作是p,它打印修改后的行。因此,打印Content-Length:后的数字。

+0

谢谢! :)这是一个非常好的解释 – Chris

1

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

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

这里,重定向到STDERRSTDOUT使sed到上运行。 sed命令的作用是禁止打印(-n),然后对于包含Content-Length的行,请从开头删除所有字符,包括:space。然后打印修改后的行(psed)。

器同上awk

wget http://google.com --spider --server-response 2>&1 | awk '/Content-Length/{print $2}' 

对于含有Content-Length线,打印第二字段(这将是数部分)。

+0

sed命令可以进一步减少,因为'p'可以用作修饰符///':'sed -n's/^ Content-Length:// p “' –