data-tools

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Data Tools Skill

结构化数据处理工具技能指南

Critical Rule

核心规则

NEVER use
grep
,
sed
, or
awk
on JSON, YAML, TOML, XML, or CSV data.
These text-processing tools treat structured data as flat text. They break on multi-line values, nested structures, quoted strings containing delimiters, and field reordering. Use the right tool for the format.

绝对不要在JSON、YAML、TOML、XML或CSV数据上使用
grep
sed
awk
这些文本处理工具会将结构化数据视为纯文本处理。它们会在多行值、嵌套结构、包含分隔符的带引号字符串以及字段重排序场景下失效。请针对对应格式使用正确的工具。

Tool Selection Guide

工具选择指南

FormatToolNotes
JSONjqOr
gh --jq
for GitHub CLI output
YAMLyqSame jq-like syntax, in-place editing
TOMLdaselNative TOML support
XMLdaselOr
xmlstarlet
for XPath
CSV / TSVqsvFast, memory-efficient, purpose-built
Mixed / multipledaselUniversal selector, auto-detects format
Quick decision:
  • One format, one file? Use the format-specific tool (jq/yq/qsv).
  • Multiple formats or TOML/XML? Use dasel.
  • GitHub CLI output? Use
    gh --jq
    flag directly (never pipe to jq).

格式工具备注
JSONjq处理GitHub CLI输出时可使用
gh --jq
YAMLyq与jq类似的语法,支持原地编辑
TOMLdasel原生支持TOML格式
XMLdasel或使用
xmlstarlet
处理XPath表达式
CSV / TSVqsv快速、内存高效、专为表格数据打造
混合/多种格式dasel通用选择器,可自动检测格式
快速决策建议:
  • 单一格式、单一文件?使用对应格式的专用工具(jq/yq/qsv)。
  • 多种格式或处理TOML/XML?使用dasel。
  • GitHub CLI输出?直接使用
    gh --jq
    参数(绝对不要通过管道传递给jq)。

Quick Examples

快速示例

jq -- JSON

jq -- JSON处理

bash
jq -r '.version' package.json
jq '.users[] | select(.role == "admin")' users.json
jq '.version = "2.0.0"' pkg.json > pkg.json.tmp && mv pkg.json.tmp pkg.json
bash
jq -r '.version' package.json
jq '.users[] | select(.role == "admin")' users.json
jq '.version = "2.0.0"' pkg.json > pkg.json.tmp && mv pkg.json.tmp pkg.json

yq -- YAML

yq -- YAML处理

bash
yq '.services.web.image' docker-compose.yml
yq -i '.jobs.test.strategy.matrix.php-version = ["8.2", "8.3", "8.4"]' .github/workflows/ci.yml
bash
yq '.services.web.image' docker-compose.yml
yq -i '.jobs.test.strategy.matrix.php-version = ["8.2", "8.3", "8.4"]' .github/workflows/ci.yml

dasel -- TOML / XML / Universal

dasel -- TOML / XML / 通用处理

bash
dasel -f Cargo.toml '.package.version'
dasel put -f config.json -t string -v "localhost" '.database.host'
dasel -f input.json -w yaml
bash
dasel -f Cargo.toml '.package.version'
dasel put -f config.json -t string -v "localhost" '.database.host'
dasel -f input.json -w yaml

qsv -- CSV / TSV

qsv -- CSV / TSV处理

bash
qsv headers data.csv && qsv stats data.csv --everything | qsv table
qsv search -s status "active" users.csv | qsv select name,email
bash
qsv headers data.csv && qsv stats data.csv --everything | qsv table
qsv search -s status "active" users.csv | qsv select name,email

GitHub CLI -- always use --jq

GitHub CLI -- 始终使用--jq参数

bash
gh api repos/owner/repo/releases --jq '.[0].tag_name'
gh pr list --json number,title --jq '.[] | "\(.number)\t\(.title)"'

bash
gh api repos/owner/repo/releases --jq '.[0].tag_name'
gh pr list --json number,title --jq '.[] | "\(.number)\t\(.title)"'

Anti-Patterns

反模式示例

bash
undefined
bash
undefined

BAD: grep/sed on JSON (breaks on formatting, nesting, escapes)

错误:在JSON上使用grep/sed(会在格式、嵌套、转义场景下失效)

grep '"version"' package.json | sed 's/.: "(.)".*/\1/'
grep '"version"' package.json | sed 's/.: "(.)".*/\1/'

GOOD:

正确:

jq -r '.version' package.json

```bash
jq -r '.version' package.json

```bash

BAD: sed on YAML (ignores indentation, multi-line values)

错误:在YAML上使用sed(忽略缩进、多行值)

sed -i 's/image: node:.*/image: node:20/' docker-compose.yml
sed -i 's/image: node:.*/image: node:20/' docker-compose.yml

GOOD:

正确:

yq -i '.services.app.image = "node:20"' docker-compose.yml

```bash
yq -i '.services.app.image = "node:20"' docker-compose.yml

```bash

BAD: awk on CSV (breaks on quoted fields containing commas)

错误:在CSV上使用awk(会在包含逗号的带引号字段场景下失效)

awk -F',' '{print $2}' data.csv
awk -F',' '{print $2}' data.csv

GOOD:

正确:

qsv select 2 data.csv

---
qsv select 2 data.csv

---

References

参考资料

CookbookContent
jq CookbookExtraction, filtering, transformation, GitHub CLI patterns
yq CookbookYAML editing, GitHub Actions, Docker-Compose, Kubernetes
dasel CookbookTOML/XML editing, format conversion, universal selector
CSV Processingqsv workflows, joins, stats, large file handling
External docs: jq manual | yq docs | dasel docs | qsv docs
手册内容
jq 手册提取、过滤、转换、GitHub CLI使用模式
yq 手册YAML编辑、GitHub Actions、Docker-Compose、Kubernetes配置
dasel 手册TOML/XML编辑、格式转换、通用选择器
CSV 处理指南qsv工作流、连接、统计、大文件处理