Как к grep завихряются-I информация заголовка

Я пытаюсь получить ссылку перенаправления от сайта при помощи 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

Что продолжается?

5
задан Sildoreth 14 April 2015 в 16:06
поделиться

2 ответа

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

6
ответ дан 14 December 2019 в 01:02
поделиться

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

UPDATE

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

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

echo 1..$test..2 | less

less shows:

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

,где ^M — возвращаемый символ каретки.

3
ответ дан 14 December 2019 в 01:02
поделиться