2011-06-06 127 views
0

提取我用我的Mac终端做了一个脚本,它基本上:sed命令从XML

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/[email protected]?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返回“primary_location”内的AUTH代码。所以基本上我想存储

daEaIcRcbb.afahbOdwbWdjdYcEdYaOaDdc-bn7nM7-4q-PN0X1_3nqDHom4EBvmEuwr 

上的一个变量。

我发现这个在线,但它似乎并没有工作。

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

你是否在这里搜索S.O.?每周询问有关编辑xml和sed的问题。祝你好运。 – shellter 2011-06-06 13:59:40

+0

我做过,但他们都谈论从标签中提取,但我想要做的是提取一个标签内的子字符串。 – antonio 2011-06-06 18:32:27

回答

1

尝试

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

读取该文件,并在auth代码前行到=相匹配,存储了从那里高达&ai&\1,然后将其代入整个模式空间。

0

您在. s的中间有一个杂散空间()!

这是整洁而将输出auth=与值(它看起来像它的字母数字的连字符的字符串和下划线):

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

你甚至可以用它像这样:

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

适用于OSX。