Команда sed для извлечения из XML - PullRequest
0 голосов
/ 06 июня 2011

Я использую мой Mac-терминал для создания скрипта, он в основном делает:

wget http://p2.edms-pr.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live

Этот файл возвращает XML, который я могу сохранить в txt или XML, я сохраняю его как "url.xml "

<PlayerContent>
<ListenLiveInitialize>
<StreamInfo>
<stream id="4694" primary_location="rtmp://cp58082.live.edgefcs.net/live/COR_5103_OR@s5137?auth=daEaIcRcbb.afahbOdwbWdjdYcEdYaOaDdc-bn7nM7-4q-PN0X1_3nqDHom4EBvmEuwr&aifp=1234&CHANNELID=4694&CPROG=_&MARKET=PREMIERE&REQUESTOR=EDMS-PR&SERVER_NAME=p2.edms-pr.ccomrcdn.com&SITE_ID=13293&STATION_ID=EDMS-PR&MNM=_&TYPEOFPLAY=0" backup_location=""/>
</StreamInfo>
<JustPlayed/>

Я хочу использовать SED для возврата кода AUTH внутри" primary_location ".Поэтому я хочу сохранить

daEaIcRcbb.afahbOdwbWdjdYcEdYaOaDdc-bn7nM7-4q-PN0X1_3nqDHom4EBvmEuwr

в переменной.

Я нашел это в Интернете, но, похоже, он не работает.

sed -n 's/.*\(auth=......................................... ...........................\).*/\1/p' url.xml

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Попробуйте

sed -n 's|^<stream.*auth\=\(.*\)\&ai.*|\1|p' url.xml

, который читает файл и соответствует строке до = перед кодом авторизации, сохраняет все оттуда до & в &ai как \1, который затем заменяется всем пространством шаблона.

0 голосов
/ 07 июня 2011

У вас есть паразитное пространство () в середине ваших . s!

Это аккуратнее и будет выводить auth= со значением (похоже, что это строка буквенно-цифровых символов с дефисами и подчеркиванием):

% grep -o 'auth=[[:alnum:]_-]\+' url.xml

Вы можете даже использовать его так:

% eval $(grep -o 'auth=[[:alnum:]_-]\+' url.xml) 
% echo ${auth}
daEaIcRcbb.afahbOdwbWdjdYcEdYaOaDdc-bn7nM7-4q-PN0X1_3nqDHom4EBvmEuwr

Работает на OSX.

...