
我正在參加 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}'