![使用 AWK/SED 从多个字符串中提取单词](https://linux22.com/image/135975/%E4%BD%BF%E7%94%A8%20AWK%2FSED%20%E4%BB%8E%E5%A4%9A%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%8F%90%E5%8F%96%E5%8D%95%E8%AF%8D.png)
答案1
使用XML小星:
xmlstarlet sel -t -m '//APPLIANCE' -v 'concat(NAME/text()," ",STATUS/text())' -nl file.xml
对于给定的数据,这将产生
METASYNC Online
DELTA Offline
它通过查找 XML 文档中的所有节点并使用中间的空格APPLIANCE
连接它们的值NAME
和子节点来实现此目的。在输出每个 的结果后,最后插入一个STATUS
换行符。-nl
APPLIANCE
如果您想要列标题和更好的表格格式:
( echo 'Device_name Status'
xmlstarlet ...as above... ) | column -t
答案2
您可以使用它来获得所需的输出
$ echo "DEVICE-NAME STATUS" ; grep -e NAME -e STATUS <filename> | sed 's#NAME##g ; s#STATUS##g ; s#<>## ; s#</>##' | xargs -L2 | column -t
输出:
DEVICE-NAME STATUS
METASYNC Online
DELTA OFFLINE