我们如何使用以下模式中的grep命令提取KeyProviderType标记内的内容?
<ContentProtectKeyProfiles-row><Name>PREM7</Name><Domain>42.0.112.121</Domain<ProfileType>4</ProfileType>
<Protocol>HTTP</Protocol><Port>80</Port><KeyProviderType>HLS-AES-128</KeyProviderType</ContentProtectKeyProfiles-row>
答案 0 :(得分:1)
a@x:/tmp$ cat s.xml
<ContentProtectKeyProfiles-row> <Name>PREM7</Name> <Domain>42.0.112.121</Domain> <ProfileType>4</ProfileType> <Protocol>HTTP</Protocol> <Port>80</Port> <KeyProviderType>HLS-AES-128</KeyProviderType> </ContentProtectKeyProfiles-row>dhruv@dhruv-pathak:/tmp$
a@x:/tmp$ cat s.xml | grep -oe "<KeyProviderType>.*</KeyProviderType>"
<KeyProviderType>HLS-AES-128</KeyProviderType>
答案 1 :(得分:1)
不要使用grep
来处理XML文件。使用适当的XML解析器。例如,使用xsh,我可以运行
open in.xml ;
echo (//KeyProviderType) ;
顺便说一下,我必须修复输入中缺少>
的2个标签。
答案 2 :(得分:0)
您可以尝试使用gnu awk
(由于RS)
awk -v RS="KeyProviderType" 'NR%2==0 {gsub(/>|<\//,"");print}' file
HLS-AES-128
答案 3 :(得分:0)
如果你的grep支持-P标志,你可以使用regex lookahead和lookbehind's。
cat s.xml | grep -oP "(?<=<KeyProviderType>).*(?=</KeyProviderType>)"