![从文件中搜索特定值](https://linux22.com/image/1153720/%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E6%90%9C%E7%B4%A2%E7%89%B9%E5%AE%9A%E5%80%BC.png)
我有一个包含以下内容的 xml 文件,如何在 Ubuntu 中使用 linux shell 命令仅打印行中的内容。value='[email protected]'
symbolicName="ROB_EMAIL_ALERT"
<entries xmi:id="VariableSubstitutionEntry_1468437285392" symbolicName="DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH" value="/cidba/udb/V10.5/java"/>
<entries xmi:id="VariableSubstitutionEntry_1468437302240" symbolicName="DB2UNIVERSAL_JDBC_DRIVER_PATH" value="/cidba/udb/V10.5/java"/>
<entries xmi:id="VariableSubstitutionEntry_1468437322544" symbolicName="DB2_JDBC_DRIVER_PATH" value="/cidba/udb/V10.5/java"/>
<entries xmi:id="VariableSubstitutionEntry_1503425349323" symbolicName="ROB_EMAIL_ALERT" value="[email protected]"/>
答案1
看看这个:https://stackoverflow.com/questions/25508512/shellscript-read-xml-attribute-value
因此你可以运行这个命令:
sed -n '/<property symbolicName="ROB_EMAIL_ALERT"/s/.*value="\(.*\)"[^\n]*/\1/p' /path/to/file
答案2
我会这样做:
sed -nE '/symbolicName="ROB_EMAIL_ALERT"/s/.*(value="[^"]*").*/\1/p'
此sed
命令搜索包含的每一行symbolicName="ROB_EMAIL_ALERT"
并仅打印value="xyz"
其中的一部分。
示例运行
我在这里采用了你的例子,所以任何错别字都是你的错。;)
$ sed -nE '/symbolicName="ROB_EMAIL_ALERT"/s/.*(value="[^"]*").*/\1/p' <test.xml
value="[email protected]"