我试图仅获取curl
命令输出的第一行。(如果造成混淆,请见谅)
举例来说,我简单地运行:
# curl http://localhost
<!-- This is the hidden line i want to grab. -->
<!DOCTYPE html>
<html>
<head>
..
..
如果我想要这里的第一行输出,该怎么办:
<!-- This is the hidden line i want to grab. -->
我尝试过这样的事情,但还没有成功:
# curl http://localhost | head -n 1
# curl http://localhost | sed -n '1!p'
..等等都给我垃圾输出,如下所示:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0<!-- This is the hidden line i want to grab. -->
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (23) Failed writing body (173 != 1763)
它并不是如上所述预期的输出:
<!-- This is the hidden line i want to grab. -->
这里有没有专家请问我=(
答案1
这种所谓的垃圾输出基本上是下载数据过程中的进度表。你基本上可以忽略它,因为它默认进入标准误差被忽略的流,因此只有相关部分被打印出来标准输出。
测试如下:
$ curl http://example.com/ | head -n1 > example.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 112k 0 --:--:-- --:--:-- --:--:-- 124k
(23) Failed writing body
$ cat example.html
<!doctype html>
如果您仍想使其静音,请添加-s
安静模式的参数或将标准错误流重定向到/dev/null
,例如:
$ curl -s http://example.com/ 2> /dev/null | head -n1
<!doctype html>
或者使用命令替换:
head -n1 <(curl -s http://example.com/ 2> /dev/null)
答案2
您还可以使用大王打印输出的第一行
例子:
$ curl -skI -XGET 'http://example.com' | awk 'NR==1'
HTTP/1.1 200 OK
答案3
即使这是一个老话题,我也会回答:您可以尝试使用
$ curl http://localhost -o localhost.txt
$ head -n 1 本地主机.txt