我正在使用我的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
答案 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。