如果Link标头包含rel = next,则查找下一个链接。 获取链接头可能导致不同的字符串。我需要找到下一个链接。 例如
Link: <http://mygithub.com/api/v3/organizations/20/repos?page=1>; rel=prev, <http://mygithub.com/api/v3/organizations/20/repos?page=3>; rel=next, <http://mygithub.com/api/v3/organizations/20/repos?page=4>; rel=last, <http://mygithub.com/api/v3/organizations/20/repos?page=1>;
将是http://mygithub.com/api/v3/organizations/20/repos?page=3
Link: <http://mygithub.com/api/v3/organizations/4/repos?page=2>; rel="next", <http://mygithub.com/api/v3/organizations/4/repos?page=2>; rel="last"
将是http://mygithub.com/api/v3/organizations/4/repos?page=2
玩sed和参数扩展-经验不足,所以卡住了:)
答案 0 :(得分:1)
请注意,使用非HTML工具解析HTML充满了危险;您会看到这可行,并假设您可以永远摆脱它。当您应该研究如何使用可识别html的工具时,您将花费数小时来尝试使工作达到新的高度。不要说我们没有警告过您(-;,但是
printf "<http://mygithub.com/api/v3/organizations/20/repos?page=1>; rel=prev, <http://mygithub.com/api/v3/organizations/20/repos?page=3>; rel=next, <http://mygithub.com/api/v3/organizations/20/repos?page=4>; rel=last, <http://mygithub.com/api/v3/organizations/20/repos?page=1>;\n" \
| awk -F" " '{
for(i=1;i<=NF;i++){
if ($i == "rel=next,") {
gsub(/[<>]/,"",$(i-1);sub(/;$/,"",$(i-1))
print $(i-1)
}
}
}'
产生所需的输出:
http://mygithub.com/api/v3/organizations/20/repos?page=3
要将脚本节的输出保存到变量中,请包装代码以替换命令,在这种情况下
nextReposLink=$( printf .... | awk '....' )
#-------------^^--------------------------^
^
指向项是命令替换的现代语法。 $( ... )
内部的代码被执行,标准输出作为参数传递给调用命令行。 (命令替换的原始语法是/ cmds,在简单的情况下也是如此,即 var =`cmds` 。您可以轻松地嵌套现代cmd替换,而旧版本则需要很多逃脱字符摆弄。如果可以,请避免。
请注意,对于s/str/rep/
可以执行的任何sed
,awk
都可以执行,但是需要使用sub(/regx/, "repl", "str")
或gsub(sameArgs)
函数。在这种情况下,您可能需要像<>
那样逃避\<\>
。
请务必始终用双引号括住变量echo "$nextReposLink"
的使用。
IHTH
答案 1 :(得分:0)
好吧-我将您的一个URL字符串放入一个文本文件中,并且能够通过两次剪切拉出第一个URL。
[root@oelinux2 ~]# cat test
Link: <http://mygithub.com/api/v3/organizations/20/repos?page=1>; rel=prev, <http://mygithub.com/api/v3/organizations/20/repos?page=3>; rel=next, <http://mygithub.com/api/v3/organizations/20/repos?page=4>; rel=last, <http://mygithub.com/api/v3/organizations/20/repos?page=1>;
然后使用cut:
cat test | cut -d "<" -f2 | cut -d ">" -f1
[root@oelinux2 ~]# cat test | cut -d "<" -f2 | cut -d ">" -f1
http://mygithub.com/api/v3/organizations/20/repos?page=1
这是一个选择-如果您只是想获取字符串中的第一个URL。基本上-这只是抓住两个定界符“ <”和“>”
之间的内容带切: -d是“定界符” -f是您要获取的字段。
如果您想在该字符串中获取更高的URL,则可以更改字段(-f#)并查看得到的内容:)