首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell :在yaml文件的一个子部分下获取一个特定的单词

Shell :在yaml文件的一个子部分下获取一个特定的单词
EN

Stack Overflow用户
提问于 2018-03-09 09:11:30
回答 3查看 4.5K关注 0票数 4

如何在yaml文件的metadata部分下获取metadata标记的值。

代码语言:javascript
运行
复制
    apiVersion: v1
    kind: Pod
    metadata:
      name: sss-pod-four
      namespace: default
    spec:
      containers:
      - name: sss-test-container
        image: anaudiyal/infinite-loop
        volumeMounts:
        - mountPath: "/mnt/sss"
          name: sss-test-volume
      volumes:
        - name: sss-test-volume

我需要得到sss-pod-four字符串。

代码语言:javascript
运行
复制
grep  "\sname: " config/pod.yaml | awk -F ": " '{print $2}'

上面的代码是打印sss-pod-foursss-test-containersss-test-volume

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-09 09:17:55

请你试着跟我说一下,如果这对你有帮助的话,请告诉我。

代码语言:javascript
运行
复制
awk '/metadata/{flag=1} flag && /name:/{print $NF;flag=""}'  Input_file

现在也添加了一种非单一的线性解决方案,并作了解释:

代码语言:javascript
运行
复制
awk '
/metadata/{         ##checking a string metadata in current line here and if it is TRUE then do following:
 flag=1}            ##Making a variable named flag value TRUE here.
flag && /name:/{    ##Checking if variable named flag is TRUE here and current line has string name: in it then do following:
  print $NF;        ##Printing the last column of the current line here.
  flag=""           ##Making variable named flag value as NULL here.
}
' Input_file        ##Mentioning Input_file name here.
票数 6
EN

Stack Overflow用户

发布于 2018-03-09 09:20:24

您还可以使用这个sed命令来达到您的目标:

代码语言:javascript
运行
复制
$ sed -n '/metadata:/,/spec:/p' input.yml | grep -oP '(?<=name: ).*'
sss-pod-four
票数 6
EN

Stack Overflow用户

发布于 2018-03-09 11:09:02

您还可以使用GNU grep:

grep -zoP '\n(\s*)metadata:(\n\1\s+.*)+name: \K.*' input.yml

-z标志将行拆分为零字节,因此可以在单个正则表达式中匹配整个文件内容。-o只允许grep输出匹配,而-P启用Perl样式regex,这对于换行符匹配和\K都是必要的,后者将输出限制为左regex部件后面的无换行符。

与其他解决方案不同的是,您可以适应sed或awk,我首先测量metadata:行的缩进,然后只在以下行的缩进更高时继续匹配,这样即使spec:不遵循metadata:,即使metadata:不包含name属性,它也能正确工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49190209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档