【问题标题】:How to grep curl -I header information如何grep curl -I 标头信息
【发布时间】:2010-06-03 11:27:27
【问题描述】:

我试图通过使用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

发生了什么事?

【问题讨论】:

  • 请注意,--silent 或 -s 与 2> /dev/null 一样好用(而且打字更少)。

标签: linux redirect curl


【解决方案1】:

正如@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”报告它,那么您可能需要更改相应的正则表达式。

【讨论】:

  • 啊,是的,我总是忘记那个命令。是的,奇怪的是所有其他人都以大写字母开头但不是位置:我已添加到 [lL] 位置:这样我的脚本仍将在不同的发行版上运行 :) 谢谢!
【解决方案2】:

“Location”http 标头以大写 L 开头,请尝试在您的命令中替换它。

更新

好的,我已经分别运行了两行并且每行都运行良好,除了看起来 curl 命令的输出包含一些在变量中捕获的控制字符。稍后在 echo 命令中打印时,会打印 $test 变量,然后回车以将光标设置到行首,然后将 ..2 打印在 1.. 的顶部。

查看less中的$test变量:

echo 1..$test..2 | less

节目较少:

1..http://www.redirectURL.com/^M..2

其中 ^M 是回车符。

【讨论】:

  • 不是我的,我的是“位置:”
  • @user353852:太棒了!指向less 的管道确实突出了为什么“..2”位于行首。
  • 啊,是的,我现在看到了,原来是那个小乞丐惹来了麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多