Linux 过滤块
我有以下模式的多个块Linux 过滤块,linux,bash,shell,xml-parsing,Linux,Bash,Shell,Xml Parsing,我有以下模式的多个块 <APPLIANCE> <ID>12233</ID> <UUID>xxxx-xxxx-xxxx-xxxx-xxxxxxx</UUID> <NAME>xxxxxxx</NAME> <STATUS>Offline</STATUS> </APPLIANCE> <APPLIANCE>
<APPLIANCE>
<ID>12233</ID>
<UUID>xxxx-xxxx-xxxx-xxxx-xxxxxxx</UUID>
<NAME>xxxxxxx</NAME>
<STATUS>Offline</STATUS>
</APPLIANCE>
<APPLIANCE>
<ID>12234</ID>
<UUID>xxxx-xxxx-xxxx-xxxx-xxxxxxx</UUID>
<NAME>yyyyy</NAME>
<STATUS>Offline</STATUS>
</APPLIANCE>
12233
xxxx-xxxx-xxxx-xxxx-xxxxxxx
xxxxxxx
离线
12234
xxxx-xxxx-xxxx-xxxx-xxxxxxx
YYYY
离线
我想提取一个具有特定ID和特定名称的块。
应该显示输出
例如:-
<ID>12234</ID>
<NAME>yyyyy</NAME>
12234
YYYY
我想用grep,sed,awk
谢谢。此sed适用于您:
sed -n '/<ID>12234/,/<NAME>/{//p}' file
sed-n'/12234/,//{//p}文件
但您最好使用xml解析器作为或来解析有效的xml文件。此sed应该适合您:
sed -n '/<ID>12234/,/<NAME>/{//p}' file
sed-n'/12234/,//{//p}文件
但是您最好使用xml解析器作为或来解析有效的xml文件。有人能解释为什么
{//p}
只打印范围的开始和结束部分/12234/,//
?我想//会重复上一个匹配,我认为这是整个范围。@marli/
与上一个地址匹配相同的模式,或者在这种情况下,匹配范围中每个地址的模式。要打印整个范围,只需删除/
。有人能解释一下为什么{//p}
只打印范围的开头和结尾/12234/,//
?我想//会重复上一个匹配,我认为这是整个范围。@marli/
与上一个地址匹配相同的模式,或者在这种情况下,匹配范围中每个地址的模式。要打印整个范围,只需删除/
。