diff --git a/README.md b/README.md index b74f3de..930acb2 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Quick Reference [MySQL](./docs/mysql.md) [MATLAB](./docs/matlab.md) [Python](./docs/python.md) -[PostgreSQL](./docs/postgres.md) +[PostgreSQL](./docs/postgres.md) [Rust](./docs/rust.md) [Swift](./docs/swift.md) [SwiftUI](./docs/swiftui.md) @@ -86,16 +86,16 @@ Quick Reference [Gmail](./docs/gmail.md) [nginx](./docs/nginx.md) [Semver](./docs/semver.md) -[Sketch](./docs/sketch.md) +[Sketch](./docs/sketch.md) [Sublime Text](./docs/sublime-text.md) [VSCode](./docs/vscode.md) [Vim](./docs/vim.md) [WebStorm](./docs/webstorm.md) [XPath](./docs/xpath.md) -[Xcode](./docs/xcode.md) +[Xcode](./docs/xcode.md) -## Linux 命令 +## 命令 [Ansible](./docs/ansible.md) [Awk](./docs/awk.md) @@ -110,8 +110,9 @@ Quick Reference [Find](./docs/find.md) [FFmpeg](./docs/ffmpeg.md) [Htop](./docs/htop.md) -[Home Brew](./docs/homebrew.md) +[Home Brew](./docs/homebrew.md) [Netstat](./docs/netstat.md) +[jq](./docs/jq.md) [Lsof](./docs/lsof.md) [Netcat](./docs/netcat.md) [Sed](./docs/sed.md) @@ -122,7 +123,7 @@ Quick Reference ## 其它 -[Quick Reference](./docs/quickreference.md) +[Quick Reference](./docs/quickreference.md) [Github Actions](./docs/github-actions.md) [Colors Named](./docs/colors-named.md) [HTTP 状态码](./docs/http-status-code.md) diff --git a/docs/jq.md b/docs/jq.md new file mode 100644 index 0000000..fe8046c --- /dev/null +++ b/docs/jq.md @@ -0,0 +1,236 @@ +jq 备忘清单 +=== + +这个快速参考备忘单提供了使用 [jq](https://stedolan.github.io/jq/) 命令的各种方法。 + +入门 +---- + +### 介绍 + +jq 就像用于 JSON 数据的 [sed](./sed.md) - 您可以使用它来切片、过滤、映射和转换结构化数据 + +- [jq 官网](https://stedolan.github.io/jq/) _(stedolan.github.io)_ +- [jq 命令使用](https://jaywcjlove.github.io/linux-command/c/jq.html) _(jaywcjlove.github.io)_ + +安装 + +```bash +$ sudo apt-get install jq # Debian& Ubuntu +$ sudo dnf install jq # Fedora +$ sudo zypper install jq # openSUSE +$ sudo pacman -S jq # Arch +$ brew install jq # macOS & Homebrew +$ port install jq # macOS & MacPorts +``` + +语法 + +```bash +$ jq [options] [file...] +$ jq [options] --args [strings...] +$ jq [options] --jsonargs [JSON_TEXTS...] +``` + + +### 选项 + + +:- | - +:- | - +`-c` | 紧凑而不是漂亮的输出 +`-n` | 使用`null`作为单个输入值 +`-e` | 根据输出设置退出状态代码 +`-s` | 将所有输入读取(吸取)到数组中;应用过滤器 +`-r` | 输出原始字符串,而不是JSON文本 +`-R` | 读取原始字符串,而不是JSON文本 +`-C` | 为 JSON 着色 +`-M` | 单色(不要为JSON着色) +`-S` | 在输出上排序对象的键 +`--tab` | 使用制表符进行缩进 +`--arg a v` | 将变量 `$a` 设置为 value `` +`--argjson a v` | 将变量 `$a` 设置为 JSON value `` +`--slurpfile a f` | 将变量 `$a` 设置为从``读取的JSON文本数组 +`--rawfile a f` | 将变量 `$a` 设置为包含``内容的字符串 +`--args` | 其余参数是字符串参数,而不是文件 +`--jsonargs` | 其余的参数是JSON参数,而不是文件 +`--` | 终止参数处理 + +学习示例 +--- + +### 获取一个键的值 + +```bash +$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo' +``` + + +输出结果 + +```bash +42 +``` + +### 数组运算 + +```bash +$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]' +``` + + +输出结果 + +```bash +{ + "name": "XML", + "good": false +} +``` + +### 构造一个数组/对象 + +```bash +$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}' +``` + + +输出结果 + +```bash +{ + "user": "stedolan", + "title": "JQ Primer" +} +{ + "user": "stedolan", + "title": "More JQ" +} +``` + +### 计算一个值的长度 + +```bash +$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length' +``` + + +输出结果 + +```bash +2 +6 +1 +0 +``` + +### 取出数组中的键 + +```bash +$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys' +``` + + +输出结果 + +```bash +[ + "Foo", + "abc", + "abcd" +] +``` + +### 使用多个过滤器 + +```bash +$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' +``` + + +输出结果 + +```bash +42 +"something else" +``` + +### 管道传递给下一个过滤器 + +```bash +$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name' +``` + + +输出结果 + +```bash +"JSON" +"XML" +``` + +### 条件语句判断 + +```bash +$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))' +``` + + +输出结果 + +```bash +[ + 5, + 3, + 7 +] +``` + +### 每个输入调用过滤器 + +```bash +$ echo '[1,2,3]' | jq 'map(.+1)' +``` + +输出结果 + +```bash +[ + 2, + 3, + 4 +] +``` + +### 条件判断 + +```bash +$ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end' +``` + + +输出结果 + +```bash +"many" +``` + +### 字符串插入值并进行运算 + +```bash +$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"' +``` + + +输出结果 + +```bash +"The input was 42, which is one less than 43" +``` + + +另见 +---- + +- [jq 官网](https://stedolan.github.io/jq/) _(stedolan.github.io)_ +- [jq 命令使用](https://jaywcjlove.github.io/linux-command/c/jq.html) _(jaywcjlove.github.io)_ \ No newline at end of file