2010-06-03 96 views
5

我試圖通過使用curl -I然後grep「位置」,然後sed出位置文本,以便我留下的URL從站點獲取重定向鏈接。如何grep curl -I標頭信息

但這不起作用。它輸出的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

請注意''--silent'或'-s'工作以及'2>/dev/null'(並且少打字)。 – Phrogz 2011-04-17 14:15:53

回答

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'報告它,那麼你可能需要改變正則表達式。

+0

啊是的awk,我總是忘記那個命令。是的,奇怪的是所有其他人都以大寫而不是位置開頭:我已經在[lL]中加入了:這樣我的腳本仍然可以在不同的發行版上工作:)謝謝! – Mint 2010-06-03 13:39:23

3

「位置」http頭以大寫字母L開頭,請嘗試在您的命令中替換該位置。

UPDATE

行,我已分別運行兩個線,並且每個運行正常,不同之處在於它看起來像從捲曲命令的輸出包括在所述變量被捕獲一些控制字符。當它稍後打印在echo命令中時,將打印$ test變量,然後回車將光標設置到行的開頭,然後將..2打印在1的頂部..

檢出的$測試變量在以下:

echo 1..$test..2 | less 

以下所示:

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

其中^ M是回車符。

+0

不是我的,我的是「地點:」 – Mint 2010-06-03 11:52:57

+1

@ user353852:絕對的輝煌!將管道配置爲「less」確實突出了爲什麼「.2」處於該行的開頭。 – Johnsyweb 2010-06-03 12:38:09

+0

啊是的,我現在看到了,所以那個小乞丐引起了所有的麻煩。 – Mint 2010-06-03 13:36:56