使用 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_

如果可能的话,我想删掉xargsand/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")[]'