我得到了xml文件,例如:
<configuration>
<property>
<name>prop_name</name>
<value>prop_value</value>
</property>
</configuration>
我想打印属性的值(本例中为"prop_value"(。我知道sed不是这个问题的最佳解决方案,但我不得不使用bash:(
我正试图使用下一个结构:
sed -n '/prop_name/{:a;N;/</value>/!ba {s|<value>(.*)</value>|1|p}}' file
但我得到的是:
<name>prop_name</name>
prop_value
即使不匹配,它也会打印图案空间中的每一行。是否可以从sed的图案空间中删除第一行,只打印匹配的组?提前感谢大家的帮助。
您忘记用N
命令匹配您保存在模式空间中的<value>
之前的所有数据,请在<value>
:之前添加.*
sed -n '/prop_name/{:a;N;/</value>/!ba {s|.*<value>(.*)</value>|1|p}}'
# ^^
查看在线sed
演示:
s='<configuration>
<property>
<name>prop_name</name>
<value>prop_value</value>
</property>
</configuration>'
sed -n '/prop_name/{:a;N;/</value>/!ba {s|.*<value>(.*)</value>|1|p}}' <<< "$s"
# => prop_value