如何grep curl -I头信息

我试图通过使用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是回车符。