使用 jq 将空终止行转换为 JSON 字符串
Converting null-terminated lines to JSON strings with jq
我想出了一个基于 jq
的单行代码,它将一系列以 null 结尾的字符串转换为一系列 JSON 字符串:
xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_
如果可能的话,我想删掉xargs
and/ordash
。有没有办法只用 jq
做同样的事情?
用法示例:
# Create a new dir with some funny-named files
mkdir funny
cd funny
touch $'ABC\nDEF' $' GHI\nJKL ' ' - はじめまして - '
# Use find -print0 to list the files
find -type f -print0 |
# Convert the null-terminated lines to JSON strings
xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_
输出:
"./ - はじめまして - "
"./ GHI\nJKL "
"./ABC\nDEF"
以下生成您指定的输出:
find . -type f -print0 | jq -Rs 'split("\u0000")[]'
我想出了一个基于 jq
的单行代码,它将一系列以 null 结尾的字符串转换为一系列 JSON 字符串:
xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_
如果可能的话,我想删掉xargs
and/ordash
。有没有办法只用 jq
做同样的事情?
用法示例:
# Create a new dir with some funny-named files
mkdir funny
cd funny
touch $'ABC\nDEF' $' GHI\nJKL ' ' - はじめまして - '
# Use find -print0 to list the files
find -type f -print0 |
# Convert the null-terminated lines to JSON strings
xargs -0 dash -c 'for i in "$@"; do printf %s "$i" | jq -Rs . ; done' _dummy_
输出:
"./ - はじめまして - "
"./ GHI\nJKL "
"./ABC\nDEF"
以下生成您指定的输出:
find . -type f -print0 | jq -Rs 'split("\u0000")[]'