Почему вывод консоли возвращается в начало строки? ИЛИ Почему моя конкатенация не конкатенируется? - PullRequest
0 голосов
/ 15 июля 2009

Меня вдохновил другой вопрос - написать сценарий (или, скорее, однострочник) для захвата случайных страниц Википедии.

Вот что у меня так далеко:

# Grab the HTTP header response from Wikipedia's random page link
curl 'http://en.wikipedia.org/wiki/Special:Random' -sI

# Search STDIN for the Location header and grab its content
perl -wnl -e '/Location: (.*)/ and print $1;'

И это работает. Он выводит случайный URL-адрес Википедии на консоль. Но мне нужно добавить «? Printable = yes» к этому URL, чтобы получить страницу Википедии без всего содержимого, не относящегося к статье.

Однако, работает:

curl 'http://en.wikipedia.org/wiki/Special:Random' -sI | perl -wnl -e '/Location: (.*)/ and print $1 . "?printable=yes";'

Выходы: ? Версия для печати = yespedia.org / вики / James_Keene_ (футболист)

Почему моя конкатенация не конкатенируется?

UPDATE:

Для любопытных, вот одна строка в его завершении:

curl `curl 'http://en.wikipedia.org/wiki/Special:Random' -sI | perl -wnl -e '/Location: ([^\r]*)/ and print $1 . "?printable=yes";'`

1 Ответ

2 голосов
/ 15 июля 2009
curl 'http://en.wikipedia.org/wiki/Special:Random' -sI | perl -wnl -e '/Location: (.*)/ and chomp($1) and print $1 . "?printable=yes";'

Не проверено, но это должно работать. Возврат к началу строки вызван мошенническим символом '\ r' в конце строки Location. Сценарий печатает URL-адрес Википедии, завершенный символом «\ r», который возвращает в начало строки, где затем продолжает печатать ?printable=yes Chomp удалит этот символ '\ r'.

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