yq 配置文件格式转换工具

2024-06-22 21:36

本文主要是介绍yq 配置文件格式转换工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在现代开发和运维的世界中,处理和转换不同格式的数据文件如 YAML、JSON、XML、CSV 等是日常任务。文件格式的多样性和复杂性常常给开发者带来不小的挑战。在这种情况下,强大的命令行工具能够极大地简化工作流程,本文主要介绍一款基于Go实现处理 YAML、JSON、XML、CSV、TOML 的命令行工具yq。

1 安装 go yq

1)安装 go 编译器

yq 依赖的 go 版本是 1.21,需要安装 1.21 版本以上的 go 版本。

$ go version
go version go1.21.11 darwin/amd64

2)安装 go yq

$ go install github.com/mikefarah/yq/v4@latest
go install github.com/mikefarah/yq/v4@latest
go: downloading github.com/mikefarah/yq/v4 v4.44.2
go: downloading github.com/mikefarah/yq v2.4.0+incompatible
go: downloading github.com/spf13/cobra v1.8.0
go: downloading gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473
go: downloading github.com/a8m/envsubst v1.4.2
go: downloading github.com/dimchansky/utfbom v1.1.1
go: downloading github.com/elliotchance/orderedmap v1.6.0
go: downloading github.com/alecthomas/participle/v2 v2.1.1
go: downloading github.com/goccy/go-json v0.10.3
go: downloading github.com/goccy/go-yaml v1.11.3
go: downloading github.com/jinzhu/copier v0.4.0
go: downloading github.com/yuin/gopher-lua v1.1.1
go: downloading golang.org/x/net v0.26.0
go: downloading github.com/magiconair/properties v1.8.7
go: downloading golang.org/x/text v0.16.0
go: downloading golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
go: downloading golang.org/x/sys v0.21.0

安装完成后,可以通过以下命令验证:

yq --version

应该会看到类似以下的输出:

yq (https://github.com/mikefarah/yq/) version v4.44.2
2 基本用法

go yq 可以处理多种文件格式,以下是一些常见的用法示例:

读取 YAML 文件

假设有一个名为 example.yaml 的 YAML 文件,内容如下:

name: John Doe
age: 30
address:city: ExampleCityzip: 12345

可以使用 yq 读取这个文件的内容:

yq e . example.yaml

输出将是:

name: John Doe
age: 30
address:city: ExampleCityzip: 12345

 

读取 JSON 文件

假设有一个名为 example.json 的 JSON 文件,内容如下:

{"name": "John Doe","age": 30,"address": {"city": "ExampleCity","zip": 12345}
}

可以使用 yq 读取这个文件的内容:

yq e -o=json . example.json

输出将是:

{"name": "John Doe","age": 30,"address": {"city": "ExampleCity","zip": 12345}
}
转换格式

go yq 强大的一点在于它可以在多种格式之间转换。比如,你可以将 YAML 文件转换为 JSON 文件:

yq e -o=json . example.yaml

类似地,可以将 JSON 文件转换为 YAML 文件:

yq e -o=yaml . example.json
编辑文件

可以使用 yq 编辑文件内容。以下演示如何修改 example.yaml 文件中的值:

yq e '.age = 31' -i example.yaml

修改后的 example.yaml 文件内容将是:

name: John Doe
age: 31
address:city: ExampleCityzip: 12345
 查询数据

有时我们只需要获取文件中的某一部分数据,yq 提供了一种简单的查询方式。比如,可以查询 example.yaml 文件中的 address 字段:

yq e '.address' example.yaml

输出将是:

city: ExampleCity
zip: 12345
多文件处理

yq 还支持同时处理多个文件,比如合并两个 YAML 文件:

假设有两个文件 file1.yaml 和 file2.yaml,内容如下:

file1.yaml:

name: John Doe
age: 30

file2.yaml:

address:city: ExampleCityzip: 12345

可以使用以下命令将这两个文件合并:

yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' file1.yaml file2.yaml

输出将是:

name: John Doe
age: 30
address:city: ExampleCityzip: 12345
使用嵌套命令

有时我们需要进行一些更复杂的操作,比如修改嵌套的值。假设我们需要修改 example.yaml 文件中 address.city 的值,可以使用嵌套命令:

yq e '.address.city = "NewCity"' -i example.yaml

修改后的文件内容将是:

name: John Doe
age: 30
address:city: NewCityzip: 12345
使用管道传输与其他命令组合

go yq 还可以与其他命令组合使用,充分利用管道传输数据。比如,可以结合 jq 命令处理 JSON 文件:

cat example.json | yq e -o=json '.' | jq '.name'

输出将是:

"John Doe"
进阶用法和扩展
自定义函数

go yq 支持自定义函数,我们可以在处理文件时执行自定义逻辑。以下是一个简单的例子,创建一个自定义函数将所有字符串转换为大写:

yq e 'def uppercase: map_values(if type == "!!str" then (. | upcase) else . end); . ' example.yaml
使用正则表达式

go yq 支持使用正则表达式进行复杂的过滤和替换操作。假设我们需要替换所有以 J 开头的名字,可以使用以下命令:

yq e '(.name | select(. == "John Doe") | sub("John", "Jane"))' example.yaml
 结合自动化工具

将 go yq 结合到自动化工具如 Makefile 或 CI/CD 管道中,可以极大地提升自动化程度和效率。例如,可以在 Makefile 中定义一个任务处理 YAML 文件:

process_yaml:yq e '.version += 1' -i example.yaml

在 CI/CD 管道中,可以使用如下步骤:

jobs:process_yaml:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Install yqrun: go install github.com/mikefarah/yq/v4@latest- name: Process YAMLrun: yq e '.version += 1' -i example.yaml
总结

go yq 是一个强大而灵活的命令行工具,适用于处理多种文件格式如 YAML、JSON、XML、CSV、TOML 和属性文件。

 

这篇关于yq 配置文件格式转换工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085472

相关文章

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二