我想从使用curl下载的文件中获取特定的字符串,并将下载的文件内容重定向到另一个shell程序。这是代码:
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
,我想使用 curl 下载它,获取其内容,传递到hexdump
thenhead
并打印 的最终输出head
。
答案1
curl
不要尝试在 内部运行etc. 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
执行一个小型 shell 脚本,该脚本使用其唯一的命令行参数运行,并通过和curl
传递结果输出。 hexdump
head