我需要从属性中具有特定标签的yaml文件中获取所有节点名称。这是 YAML 文件的结构:
node1:
description: "App Server"
******************** /many lines/ ********
tags: "web_server,file_server"
node2:
description: "Server"
******************** /many lines/ ********
tags: "nginx,nginx_a,nginx_b"
node3:
description: "Server"
******************** /many lines/ ********
tags: "application1,application2"
and so on
如何获取内部有标签"nginx"的节点名称?我们可以从末尾读取文件,如果我们有标签名称,而不是得到第一个模式^[a-z],然后再次开始搜索标签。
tac file.yaml | awk '/tag/&&/tag_name/{f=1;next} /^[a-z]/{ if (f) {print;f=0 } }' | sed 's/:r//g')
我用tac,awk和sed做了这件事。tac - 还原文件。awk使所有逻辑。sed 删除冒号,最后删除/r。