相关文章推荐
玩篮球的跑步鞋  ·  Python ...·  3 天前    · 
大力的西瓜  ·  sql ...·  2 周前    · 
聪明伶俐的芒果  ·  Linux ...·  1 年前    · 
从容的蚂蚁  ·  Python: PS ...·  1 年前    · 
高大的消防车  ·  Springboot+Neo4j+Mysql ...·  1 年前    · 

yq一个轻量级和便携式命令行YAML处理器,yq是用go编写的,所以它是一个无依赖性的二进制文件,可以直接运行在CentOS等其他发行版的Linux上

如果需要使用shell脚本去读取或修改某个yaml的键值,那么使用yq很方便的达到目的,下面将演示如果在命令行下使用yq进行读取或修改yaml文件的键值

GitHub - mikefarah/yq: yq is a portable command-line YAML, JSON and XML processor

创建测试yaml文件

[root@test ~]# cat > /root/test.yml <<EOF
>     c: 123
>   e: 456
> f: 789

1.读取yaml文件中的一个值

[root@test ~]# /root/yq_linux_amd64 '.a.b.c' /root/test.yml 
[root@test ~]# /root/yq_linux_amd64 '.d.e' /root/test.yml 
[root@test ~]# /root/yq_linux_amd64 '.f' /root/test.yml 

2.从STDIN中读取一个值

[root@test ~]# cat /root/test.yml | /root/yq_linux_amd64 '.a.b.c'
[root@test ~]# cat /root/test.yml | /root/yq_linux_amd64 '.d.e'
[root@test ~]# cat /root/test.yml | /root/yq_linux_amd64 '.f'

3.为目标文件更新一个值

[root@test ~]# cat /root/test.yml      #修改前的yaml文件
    c: 123
  e: 456
f: 789
[root@test ~]# /root/yq_linux_amd64 -i '.a.b.c=11111' /root/test.yml    #更新a.b.c的值为11111
[root@test ~]# echo $?
[root@test ~]# cat /root/test.yml       #修改后的yaml文件
    c: 11111
  e: 456
f: 789
#修改原键值成功

4.为目标文件追加一个新值

[root@test ~]# cat /root/test.yml     #修改前的yaml文件
    c: 11111
  e: 456
f: 789
[root@test ~]# /root/yq_linux_amd64 -i '.gggg=22222' /root/test.yml    #追加一个gggg=2222
[root@test ~]# echo $?
[root@test ~]# cat /root/test.yml     #追加后的yaml文件
    c: 11111
  e: 456
f: 789
gggg: 22222
#追加新键值成功

5.使用环境变量更新/或追加值

[root@test ~]# cat /root/test.yml   #修改前的yaml文件
    c: 11111
  e: 456
f: 789
gggg: 22222
[root@test ~]# test_key=33333  /root/yq_linux_amd64 -i '.hhhh = strenv(test_key)' /root/test.yml                 #追加一个hhhh键,值为$test_key
[root@test ~]# echo $?
[root@test ~]# cat /root/test.yml  #修改后的文件
    c: 11111
  e: 456
f: 789
gggg: 22222
hhhh: "33333"
#使用环境变量修改/追加键值成功
Usage:
  yq [flags]
  yq [command]
Examples:
# yq defaults to 'eval' command if no command is specified. See "yq eval --help" for more examples.
# read the "stuff" node from "myfile.yml"
cat myfile.yml | yq '.stuff' 
# update myfile.yml in place
yq -i '.stuff = "foo"' myfile.yml # update myfile.yml inplace
Available Commands:
  completion       Generate the autocompletion script for the specified shell
  eval             (default) Apply the expression to each document in each yaml file in sequence
  eval-all         Loads _all_ yaml documents of _all_ yaml files and runs expression once
  help             Help about any command
  shell-completion Generate completion script
Flags:
  -C, --colors                        force print with colors
  -e, --exit-status                   set exit status if there are no matches or null or false is returned
      --expression string             forcibly set the expression argument. Useful when yq argument detection thinks your expression is a file.
  -f, --front-matter string           (extract|process) first input as yaml front-matter. Extract will pull out the yaml content, process will run the expression against the yaml content, leaving the remaining data intact
      --header-preprocess             Slurp any header comments and separators before processing expression. (default true)
  -h, --help                          help for yq
  -I, --indent int                    sets indent level for output (default 2)
  -i, --inplace                       update the file inplace of first file given.
  -p, --input-format string           [yaml|y|props|p|xml|x] parse format for input. Note that json is a subset of yaml. (default "yaml")
  -M, --no-colors                     force print with no colors
  -N, --no-doc                        Don't print document separators (---)
  -n, --null-input                    Don't read input, simply evaluate the expression given. Useful for creating docs from scratch.
  -o, --output-format string          [yaml|y|json|j|props|p|xml|x] output format type. (default "yaml")
  -P, --prettyPrint                   pretty print, shorthand for '... style = ""'
  -s, --split-exp string              print each result (or doc) into a file named (exp). [exp] argument must return a string. You can use $index in the expression as the result counter.
      --unwrapScalar                  unwrap scalar, print the value with no quotes, colors or comments (default true)
  -v, --verbose                       verbose mode
  -V, --version                       Print version information and quit
      --xml-attribute-prefix string   prefix for xml attributes (default "+")
      --xml-content-name string       name for xml content (if no attribute name is present). (default "+content")
Use "yq [command] --help" for more information about a command.
                                    yq 是一个轻量级且便携的命令行 YAML、JSON 和 XML 处理器。它使用类似于 jq 的语法,但可以处理 yaml 文件以及 json、xml、properties、csv 和 tsv。它尚未支持 jq 的所有功能,但它支持最常用的操作和函数,并且不断添加更多功能。来查找以特定字符串开头的所有。操作符来查找特定的。请注意,使用管道运算符。您可以使用 yq 的。
在 Docker Compose 中,可以使用 docker-compose build <service> 可以构建单独的镜像。
但是,在实际的应用过程中,还会遇到其他的更复杂的需求,导致我们需要从 docker-compose.yaml 提取构建命令。
该笔记将记录:在 Docker Compose 中,如何使用 docker-compose.yml 生成构建命令。
第一步、安装依赖
安装 yq 命令:
apt-get install -y jq
 轻巧且可移植的命令行YAML处理器。 yq使用类的语法,但可用于yaml文件以及json。 它尚不支持jq所做的一切-但它确实支持最常见的操作和功能,并且还在不断添加更多功能。
 yq是用go编写的-因此,您可以为您的平台下载一个免费的依赖二进制文件,您很高兴! 如果您愿意,可以使用各种软件包管理器以及docker,下面列出了所有软件包管理器。
V4发布!
 V4现在正式发布,它与V3完全不同(很抱歉迁移),但是它与jq非常相似,使用类似的表达式语法,因此支持更复杂的功能!
 如果您一直在使用v3,并且想要/需要升级,请查看。
 对v3的支持将于2021年8月停止,直到那时,如果需要,仍然会应用关键的错误和安全修复程序。
 使用wget下载预编译的二进制文件:
通过tar.gz压缩
wget https://github.com/mikefarah/yq/releases/download/ ${VERSION} / ${BINARY} .tar.gz -O - | \
  tar xz && mv ${BINARY} /usr/bin/yq
wget h
什么是操作系统:
属于软件,管理和控制计算机硬件与软件资源的计算机程序,所有软件都必须在操作系统的支持下才能运行。(boot引导程序)
操作系统的功能:为了管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,所以操作系统内核提供一系列具备预定功能的多内核函数,然后通过一组称为系统调用的接口呈现给用户,这些接口我们统称为应用编程接口API。
操作系统内核的功能:
系统调用接口
内存管理,虚拟内存----内存交换(linux中)
文件系统管理		(Linux中有:xf
                                    下载yq使用yq截取我们需要的编排文件点击下载yq
下载yq后,拷贝到/usr/local/bin下,例如cp yq_linux_amd64 /usr/local/bin/yq && chmod +x /usr/local/bin/yq
将下面内容添加到~/.bashrc
neat () {
  yq eval 'del(
    .metadata.managedFields,...