curl コマンドと grep コマンドを使用して Web サイトのヘッド セクションを取得する方法は?

curl コマンドと grep コマンドを使用して Web サイトのヘッド セクションを取得する方法は?

Linux+ の中間試験を受けているのですが、タグを含むヘッド セクションをコピーしてファイルに出力するという問題で行き詰まっています。中間試験は 5 日が期限なので、ヘッド セクションとタグを grep するときに使用する正しいコードを教えていただけると助かります。試してみましたが、ファイルを cat curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txtすると とだけ表示され<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 し、終了タグとの間にあるものは 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

gawk を使用する:

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

関連情報