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

Chr*_*ris 0 linux bash sed wget

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

wget http://google.com --spider --server-response
Run Code Online (Sandbox Code Playgroud)

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

Content-Length: 219
Run Code Online (Sandbox Code Playgroud)

我想要做的就是阅读并打印出219号到标准输出.我在另一个堆栈溢出线程上找到了答案(在wget之前获取文件的文件大小为wget?)

wget http://google.com --spider --server-response -O - 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}'
Run Code Online (Sandbox Code Playgroud)

我理解这个命令有两个主要的困难.我希望有人可以向我详细解释这两件事.

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

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

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

Bar*_*mar 5

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

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

我不明白 - 是什么意思.我查了一下linux手册页,它提到它是为了"脚本"?这意味着什么?另外,引号中出现了什么?

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

dash e(-e)在sed命令中的含义是什么?

在您的命令中,该-n选项意味着sed默认情况下不应打印其输入行 - 您将使用该p操作显式打印所选行./Content-Length/匹配包含该字符串的行,然后是一组要对其中的匹配行执行的操作{}.第一个操作是s/.*: //,:在没有任何东西的情况下将所有内容替换为后面的空格.第二个操作是p打印修改后的行.所以打印后的数字Content-Length:.