如何仅使用grep提取模式

时间:2014-05-27 10:58:26

标签: linux unix grep

我们如何使用以下模式中的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>

4 个答案:

答案 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>)"