json - jq raw json输出回车?
问题描述
随意编辑标题;不知道怎么说。我正在尝试将 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",
""
]
任何帮助表示赞赏。
解决方案
每行都以换行符结尾。要么删除最后的换行符,要么省略数组末尾的空元素。
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"
]
该表示法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"
]
推荐阅读
- android - 在微调器中显示 Firebase 数据
- scala - Scala过滤器内部布尔值的未来以进行理解
- java - 在 pom 中使用 maven-install-plugin 将外部库导入本地存储库
- android - Bluebird EF500 扫描仪在打开相机后禁用
- javascript - APEX:显示/隐藏项目时如何自动调整项目宽度?
- java - 如何拦截弹出窗口的隐藏以验证字段
- javascript - 启用脚本调试后无法在 Visual Studio 中运行 angularJS 应用程序(1.6)
- javascript - 防止用户通过手动输入 url 进行导航
- php - Codeigniter:如何创建一个专用的 api 来告诉数据库是否已关闭
- python - 如何提取字符串字典列表的键、值