題 如何僅從'curl'命令輸出回顯第一行?


我試圖只獲得第一線 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. -->

請有任何專家=(


2
2018-02-19 11:19


起源


什麼樣的垃圾輸出?這個: curl -s http://example.com/ | head -n1 應該正常工作,除非您的輸出被壓縮。 - kenorb
編輯問題讓你知道是什麼 rubbish outputs 手段。謝謝。 - 夏期劇場
只需添加 -s 用於靜音任何進度輸出的參數(垃圾)。這仍然適用於stderr,因此如果您將其重定向到某個地方,它將不會保存到文件中。 - kenorb


答案:


這種所謂的垃圾輸出基本上是在下載數據操作期間的進度表。您基本上可以忽略它,因為默認情況下會進入 標準錯誤 被忽略的流,因此只打印出相關的部分 標準輸出

這是測試:

$ 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)

4
2018-02-19 11:46