首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed从wget读取网站的字节计数

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

Stack Overflow用户
提问于 2015-10-15 02:31:25
回答 2查看 652关注 0票数 0

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

代码语言:javascript
复制
wget http://google.com --spider --server-response

我收到一长串输出到我想要搜索的终端。其中之一是

代码语言:javascript
复制
Content-Length: 219

我所要做的就是读出来,打印出数字219的标准。我在另一个堆栈溢出线程(get file size of a file to wget before wget-ing it?)上找到了答案。

代码语言:javascript
复制
wget http://google.com --spider --server-response -O - 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}'

我很难理解这个命令。我希望有人能向我详细解释这两件事。

  1. sed通常需要一个输入文件,对吗?将wget命令输出的管道不能使它成为一个文件。为什么没有这个就行了?
  2. 我不明白-e是什么意思。我已经查找了linux手册页,它提到它是为了“脚本”?这个标志很重要,因为没有它,什么都不能用。什么意思?另外,命令的其余部分发生了什么,以及如何只打印出数字?

很抱歉问了一个先前回答的问题,但我还没有在网上找到任何有意义的解释,我想试着用另一种解决方案来解决这个问题!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-15 02:39:20

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:之后打印数字了。

票数 5
EN

Stack Overflow用户

发布于 2015-10-15 05:21:01

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

代码语言:javascript
复制
wget http://google.com --spider --server-response 2>&1 | sed -n '/Content-Length/{s/.*: //;p}'

在这里,将STDERR重定向到STDOUT,并使sed对其进行操作。sed命令所做的是取消打印(-n),然后对于包含Content-Length的行,从开始删除所有字符,包括:space。然后打印修改后的行(p in sed)。

同样适用于awk

代码语言:javascript
复制
wget http://google.com --spider --server-response 2>&1 | awk '/Content-Length/{print $2}'

对于包含Content-Length的行,请打印第二个字段(这将是数字部分)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33138834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档