Sed打印几行而不是匹配的组

  • 本文关键字:几行 打印 Sed regex bash sed
  • 更新时间 :
  • 英文 :


我得到了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

最新更新