sed命令从xml中提取

时间:2011-06-06 13:48:06

标签: sed

我正在使用我的mac终端来做一个脚本,它基本上是这样做的:

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

这个文件返回一个我可以保存为txt或XML的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在“primary_location”中返回AUTH代码。所以基本上我想存储

daEaIcRcbb.afahbOdwbWdjdYcEdYaOaDdc-bn7nM7-4q-PN0X1_3nqDHom4EBvmEuwr

关于变量。

我在网上找到了它,但它似乎没有用。

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

2 个答案:

答案 0 :(得分:1)

尝试

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

读取文件并匹配授权码之前的=行,将{A>} &中的所有内容存储为&ai \1然后替换整个模式空间。

答案 1 :(得分:0)

的中间有一个迷路空间(.)!

这更整洁,会输出auth=的值(看起来它是一串带有连字符和下划线的字母数字):

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

你甚至可以像这样使用它:

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

适用于OSX。