我正在尝试从网站获取重定向链接,方法是使用curl -I
然后grep
到“位置”,然后sed
输出位置文字,这样我就可以使用URL。
但这不起作用。它将URL输出到屏幕而不是把它
test=$(curl -I "http://www.redirectURL.com/" 2> /dev/null | grep "location" | sed -E 's/location:[ ]+//g')
echo "1..$test..2"
然后输出:
..2http://www.newURLfromRedirect.com/bla
发生了什么事?
答案 0 :(得分:6)
正如@ user353852指出的那样,你在curl
的输出中有一个回车符,只有当你尝试echo
之后的任何字符时才会显现。 less
寻呼机将其显示为 ^ M
您可以使用sed
删除“控制字符”,如下例所示:
% test=$(curl -I "http://www.redirectURL.com/" 2>|/dev/null | awk '/^Location:/ { print $2 }' | sed -e 's/[[:cntrl:]]//') && echo "1..${test}..2"
1..http://www.redirecturl.com..2
备注强>:
我使用了awk
而不是grep [...] | sed
方法,节省了一个流程。
对我来说,curl
会返回以“Location:”开头的行中的位置(大写字母为“L”),如果您的版本实际上是以小写“l”报告,那么您可能需要相应地改变正则表达式。
答案 1 :(得分:3)
“Location”http标头以大写L开头,尝试在命令中替换它。
<强>更新强>
好的,我已经分别运行了两行并且每个都运行正常,除了看起来curl命令的输出包含一些在变量中捕获的控制字符。当稍后在echo命令中打印时,打印$ test变量,然后回车,将光标设置为行的开头,然后..2打印在1的顶部..
在less中查看$ test变量:
echo 1..$test..2 | less
少节目:
1..http://www.redirectURL.com/^M..2
其中^ M是回车符。