如何grep curl -I头信息

时间:2010-06-03 11:27:28

标签: linux redirect curl

我正在尝试从网站获取重定向链接,方法是使用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

发生了什么事?

2 个答案:

答案 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是回车符。