我试图通过使用curl -I
从一个网站获得redirect链接,然后grep
到“位置”,然后sed
out的位置文本,使我剩下的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
这是怎么回事?
正如@ 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
grep [...] | sed
方法,节省一个进程。
对于我来说, curl
返回一个以'Location:'开始的位置(大写为'L'),如果你的版本真的用小写的'l'来报告,那么你可能需要相应地改变正则表达式。
“位置”http头以大写L开头,请尝试在您的命令中替换该位置。
UPDATE
好的,我已经分别运行了两条线,每条线都运行正常,除了它看起来像curl命令的输出包含一些控制字符,这些控制字符正在变量中捕获。 当稍后在echo命令中输出时,会打印$ test变量,然后回车,将光标设置到行的开头,然后将..2打印在1的顶部。
检出$ test变量少一些:
echo 1..$test..2 | less
少显示:
1..http://www.redirectURL.com/^M..2
其中^ M是回车符。