如何使用curl和grep指令抓取網站的頭部部分?

如何使用curl和grep指令抓取網站的頭部部分?

我正在參加 Linux+ 期中考試,我遇到了一個問題,我應該複製包含標籤的頭部部分並將其輸出到文件中。我的期中考將於 5 日到期,因此如果有人向我展示在 grep 頭部部分和標籤時使用的正確代碼,那將會非常有幫助。我嘗試過: curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt但是當我cat該檔案時,它會說<head>,不包括頭部或標籤。那我應該輸入什麼才能獲得文件的正確輸出呢?

答案1

這比你想要做的要複雜一些。

首先,您的命令存在一些語法問題。這curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt應該是:

curl www.hackthissite.org | grep "<head>" > ~/data/public/myfirstname\ mylastname/head.txt

但即使它不會做你想要的事情,因為你只是 grep 頭部開始標籤,而不是它和結束標籤之間的內容。

我想出了這個:

curl www.hackthissite.org > TEMPORARYFILE.txt; grep -A $(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))) "<head>" TEMPORARYFILE.txt > ~/data/public/myfirstname\ mylastname/head.txt; rm TEMPORARYFILE.txt

所以,按部分來說:

grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1

這將會取得結束標記所在的行號。這同樣適用於grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1,但對於開始標記。

然後我們有$(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))),它應該計算開始標籤和結束標籤之間有多少行。

-A它與選項一起使用grep,它使我們能夠控制要列印的匹配項後的行數。因此它將搜尋起始頭標籤並列印它和結束標籤之間的所有行。

答案2

使用呆呆:

curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'

相關內容