如何使用 curl 和 grep 命令抓取網站的頭部?
我正在參加我的 Linux+ 期中考試,但我遇到了一個問題,我應該複製包含標籤的 head 部分並將其輸出到文件中。我的期中考試將於 5 日到期,因此,如果有人向我展示了在搜尋頭部和標籤時使用的正確程式碼,那將非常有幫助。我試過了:
curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
但是當我 cat 文件時它會說的是<head>
,不包括頭部或標籤。那麼我應該輸入什麼來獲得正確的文件輸出?
這比您嘗試做的要復雜一些。
首先,您的命令存在一些語法問題。這
curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
應該是:
curl www.hackthissite.org | grep "<head>" > ~/data/public/myfirstname\ mylastname/head.txt
但即使它不會做你想做的事,因為你只是在開始標記頭部,而不是在它和結束標記之間。
我想出了這個:
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
,它使我們可以控制要列印的匹配後的行數。所以它會搜尋開始標籤並列印它和結束標籤之間的所有行。