カールを使用してダウンロードしたファイルから特定の文字列を取得し、ダウンロードしたファイルの内容を別のシェルプログラムにリダイレクトしたいと思います。コードは次のとおりです。
curl "http://file-list-url" -s | awk 'BEGIN {c=0} $0 ~ "FILE:" {urlpos=index($0,"URI=")+5; fileurl=substr($0, urlpos, 150-urlpos-2); print fileurl ; curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" fileurl | hexdump -C | head -1 ; print filecontent }'
それぞれを取得したら、fileurl
カールを使用してダウンロードし、コンテンツをインポートしてから渡し、hexdump
最終head
出力を印刷したいと思いますhead
。
答え1
curl
内部的に背中を実行しようとしないで、awk
それをパイプラインの処理ステップとして使用し、awk
パイプラインの残りの部分を実行します。
useragent='User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36
curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} curl -s -H "$useragent" {} |
hexdump -C | head -n 1
または、ペアへのすべてのヘルパー呼び出しを望み、hexdump
それに対処するには、次のようにします。head
curl
curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} sh -c '
curl -s -H "$useragent" "$1" |
hexdump -C | head -n 1' sh {}
ここではxargs
、コマンドライン引数のみを使用して実行し、結果の出力を渡すcurl
小さなシェルスクリプトを実行するために使用します。 hexdump
head