dre*_*ard 1 bash shell json jq
随意编辑标题;不知道该怎么说。我正在尝试将 shell 输出转换为 JSON 数据,用于我正在编写的工作报告系统。快速问题,无论我做什么,当我在 slurp 模式下获取原始输入并输出 JSON 时,数组中的最后一项是空白(“”)。我觉得这是我遇到的某种菜鸟jq问题,但不知道如何表达这个问题。无论我在 shell 上运行什么命令并通过管道传输到:这似乎都会发生jq:
# rpm -qa | grep kernel | jq -R -s 'split("\n")'
[
"kernel-2.6.32-504.8.1.el6.x86_64",
"kernel-firmware-2.6.32-696.20.1.el6.noarch",
"kernel-headers-2.6.32-696.20.1.el6.x86_64",
"dracut-kernel-004-409.el6_8.2.noarch",
"abrt-addon-kerneloops-2.0.8-43.el6.x86_64",
"kernel-devel-2.6.32-358.11.1.el6.x86_64",
"kernel-2.6.32-131.4.1.el6.x86_64",
"kernel-devel-2.6.32-696.20.1.el6.x86_64",
"kernel-2.6.32-696.20.1.el6.x86_64",
"kernel-devel-2.6.32-504.8.1.el6.x86_64",
"libreport-plugin-kerneloops-2.0.9-33.el6.x86_64",
""
]
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
每行都以换行符结尾。删除最后的换行符,或省略数组末尾的空元素。
vnix$ printf 'foo\nbar\n' |
> jq -R -s '.[:-1] | split("\n")'
[
"foo",
"bar"
]
vnix$ printf 'foo\nbar\n' |
> jq -R -s 'split("\n")[:-1]'
[
"foo",
"bar"
]
Run Code Online (Sandbox Code Playgroud)
该表示法检索删除了最后一个元素x[:-1]的字符串或数组的值。x这称为“切片表示法”。
只是为了说明这一点,如果您获取字符串并在换行符上拆分,则会从换行符之前和之后"foo\n"获得。"foo"""
为了使其真正强大,只有当最后一个字符确实是换行符时才可以修剪它。
vnix$ printf 'foo\nbar\n' |
> jq -R -s 'sub("\n$";"") | split("\n")'
[
"foo",
"bar"
]
vnix$ printf 'foo\nbar' |
> # notice, no final ^ newine
> jq -R -s 'sub("\n$";"") | split("\n")'
[
"foo",
"bar"
]
Run Code Online (Sandbox Code Playgroud)