Как grep curl -I информация заголовка - PullRequest
5 голосов
/ 03 июня 2010

Я пытаюсь получить ссылку перенаправления с сайта, используя curl -I, затем grep в "location" и затем 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 ]

6 голосов
/ 03 июня 2010

Как указывает @ 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', то вам, возможно, придется изменить регулярное выражение соответственно.

3 голосов
/ 03 июня 2010

заголовок http "Location" начинается с заглавной буквы L, попробуйте заменить это в своей команде.

UPDATE

ОК, я запустил обе строки по отдельности, и каждая работает нормально, за исключением того, что, похоже, выходные данные команды curl содержат некоторые контрольные символы, которые записываются в переменную. Когда это позже выводится в команде echo, печатается переменная $ test с последующим возвратом каретки, чтобы установить курсор на начало строки, а затем ..2 печатается поверх 1 ..

Проверьте переменную $ test меньше:

echo 1..$test..2 | less

меньше показывает:

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

где ^ M - символ возврата каретки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...