AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-268095

tinlyx's questions

Martin Hope
tinlyx
Asked: 2024-10-07 16:13:03 +0800 CST

如何生成带有转义双引号的双引号 JSON 字符串?

  • 8

我有时需要编写包含字符串值的 JSON 字符串,该字符串本身就是一个 JSON 字符串。例如在以下 JSON 对象中:

echo '{"rec" : " {\"id\": 1, \"name\": \"x\"}" }' | jq .

{
  "rec": " {\"id\": 1, \"name\": \"x\"}"
}

处的值"rec"是字符串形式的json {\"id\": 1, \"name\": \"x\"}"。

编写这种转义的 json 字符串非常繁琐,因为需要将每个双引号转义"为\"。

我的问题是:

给定内容{ "id": 1, "name": "x"},是否有一种使用 bash/jq 的自动方法可以正确地转义引号并获取可用作 JSON 字符串值的引号形式 "{\"id\": 1, \"name\": \"x\"}"?

json
  • 2 个回答
  • 434 Views
Martin Hope
tinlyx
Asked: 2024-08-12 03:33:16 +0800 CST

将多个字符串回显到 UNIX 管道是什么意思?

  • 8

我刚刚看到了一个使用将多个事物放入管道的示例(用于)。echojq

echo '{"A": {"a": 1}}' '{"A": {"b": 2}}' '{"B": 3}' |\
  jq --slurp 'reduce .[] as $item ({}; . * $item)'

如果我理解正确的话,这似乎在一端将三个对象放入管道,在另一端jq接收它们并将它们放入数组中,并使用合并运算符将其减少。

这让我很惊讶,我不确定如何在 中拥有多个东西stdin。

更具体地说,系统如何知道输入是三个文件以及每个文件在哪里开始/结束?

如果我只执行回显部分echo '{"A":1}' '{"A": {"b": 2}}' '{"B": 3}',则输出似乎在三个对象之间没有任何可见的分隔符:

{"A":1} {"A": {"b": 2}} {"B": 3}

单引号是否有一些特殊效果,可以告诉下一个过滤器(jq)边界?或者 jq 如何知道边界?

(这是 Ubuntu 24.04,jq 1.7.1)

pipe
  • 1 个回答
  • 1017 Views
Martin Hope
tinlyx
Asked: 2024-07-25 17:41:07 +0800 CST

如何使用 jq 创建具有路径值对(而不是键值对)的 JSON 对象?

  • 5

在jq脚本中,我需要使用路径值对(比旧的键值对更通用)创建 json 对象。也就是说,我需要使用路径而不是键,以便在更深层次上创建值。(这些路径是外部提供的,所以我事先不知道它们。)

例如,在非工作伪代码中,我想使用路径来创建这样的对象:

jq -n '{"a"."x" : 3, "b"."y" : 4}'

这样它就会创建相同的 json 对象jq -n '{"a":{"x" : 3}, "b":{"y" : 4}}',即

{
  "a": {
    "x": 3
  },
  "b": {
    "y": 4
  }
}

在某种程度上,这类似于mdir -p允许直接创建一个包含路径上所有祖先目录的目标目录。但我需要对(许多)json 对象执行此操作。因此,问题是:

使用本机 jq(可能加上一些 bash)通过路径值对创建对象的最简单方法是什么?

(我正在寻找一种复杂度较低且不需要进行大量编程的解决方案。这是在 Ubuntu 24.04 LTS 下使用 jq-1.7.1 实现的)

-- 澄清 --

我想到的输入是路径列表加上值列表,例如:

[".a.x", ".b.y"] 

和

[3, 4]

。路径由点分隔。为简单起见,我假设点之间的每个部分都是一个简单的标识符,例如y(而不是复杂的标识符,例如"y.z")。也就是说,我不考虑(目前)这样的路径:

[".a.x", ".b.\"y.z\""]
jq
  • 1 个回答
  • 40 Views
Martin Hope
tinlyx
Asked: 2024-05-16 16:55:34 +0800 CST

如何使用jq从两个可能的路径中获取值?

  • 11

我想使用 jqb从两个可能的路径(并且仅这两个路径)获取特定值。所以,基本上,我想说

jq '(path1 OR path2) | .b'

b如果位于两条路径之一path1或 ,则应该有效path2。如果两条路径都有b,则第一条路径优先。

例如,两者

echo '{"b":2}' | jq '.b'
echo '{"a": {"b":2}}' | jq '.a.b'

提取b于.和.a。

我可以说

echo ... | jq '(MAGIC).b'

使其适用于上面的两个输入?

到目前为止我尝试的是使用递归运算符..:

jq '[..|.b?|values]|first'

这种方法的作用在于:

echo '{"b":2}' | jq '[..|.b?|values]|first'
echo '{"a": {"b":2}}' | jq '..|.b?|values|first'

给2。但它不够具体,并且还允许b位于下面树中的任何位置.。它也很难阅读。另外,如果两条路径没有父子关系,则可能无法工作。

(这是 Ubuntu 24.04 LTS 中的 jq 1.7)

json
  • 1 个回答
  • 255 Views
Martin Hope
tinlyx
Asked: 2023-10-01 12:57:46 +0800 CST

如何使用命令行工具和辅助(备份)源进行下载?

  • 5

我使用wget、rsync和curl定期下载文件(通过 https 或 ssh)。我旅行时遇到的一个问题是,在一个地区访问速度很快的服务器在另一地区变得很慢(甚至无法访问)。我当前的策略是使用镜像并切换到每个区域本地的镜像。

我想知道是否有 Unix 命令行工具允许从多个镜像下载文件作为源。镜子不必并行使用。它们用作备份,如果连接丢失,则使用最快的一个。

命令行应如下所示:

xxget url1 url2 

- 更新 -

正如已接受的答案所指出的,aria2c 文档有一个示例可以做到这一点:

Download from 2 sources:

$ aria2c http://a/f.iso ftp://b/f.iso
command-line
  • 1 个回答
  • 18 Views
Martin Hope
tinlyx
Asked: 2023-07-01 23:53:23 +0800 CST

如何使用redis-cli仅导出列表的值?

  • 5

我正在尝试导出 Redis 列表的所有值,用作redis-clishell 脚本中的字符串列表。但是,有一些不需要的文本我无法删除。

对于以下列表q1:

redis:6379> 5 lpush q1 "{\"id\":1}"
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5
redis:6379> 

如果我直接使用 导出它LRANGE,结果会在每行开头有一个行号和一个括号(需要删除)。

:/# redis-cli -h redis LRANGE q1 0 -1
1) "{\"id\":1}"
2) "{\"id\":1}"
3) "{\"id\":1}"
4) "{\"id\":1}"
5) "{\"id\":1}"

如果我使用redis-cli --csv,值之间有一个逗号(需要删除):

:/# redis-cli -h redis --csv LRANGE q1 0 -1
"{\"id\":1}","{\"id\":1}","{\"id\":1}","{\"id\":1}","{\"id\":1}"

如何让 redis 只导出列表值,每一行一个?

bash
  • 1 个回答
  • 13 Views
Martin Hope
tinlyx
Asked: 2023-03-08 21:46:41 +0800 CST

如何在 alpine linux VM 中复制和粘贴?

  • 6

我最近使用 virtualbox 7 安装了一个 alpine-3.17 VM。我还安装了 guest additions 并且能够映射共享文件夹。但似乎我无法从主机操作系统复制粘贴。

我在主机操作系统(Ubuntu 22.04)中复制了一些命令,然后尝试将Ctrl-Shift-V其粘贴到高山终端(没有 GUI 的最小图像)。但是没有粘贴任何内容。我还尝试了其他几个组合键,并尝试通过安装和运行 bash 来解决问题。但是,它仍然不接受粘贴。

如何为 alpine Linux 命令行启用复制和粘贴?

(如果有必要,我可以安装一个 GUI)。

terminal
  • 1 个回答
  • 24 Views
Martin Hope
tinlyx
Asked: 2019-07-16 15:52:05 +0800 CST

使用 jq 将 json 转换为 csv 时处理 null(空数组)?

  • 4

尝试将 json 转换为 csv 时,我通过以下jq查询收到关于 null 的错误:

printf "[]" | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'

它给出了以下错误,

jq: error (at <stdin>:0): Cannot iterate over null (null)

但如果 json 数组非空并且其中有一个对象,则可以正常工作:

$ printf '[{"a":1}]' | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
"a"
1

jq语法看起来不错,但我刚开始使用这个工具时对它并不熟悉。

有人可以解释如何在数组为空时修补查询以不输出任何内容吗?(第一个例子)。

ubuntu csv
  • 1 个回答
  • 6085 Views
Martin Hope
tinlyx
Asked: 2019-02-22 17:51:38 +0800 CST

在终端中显示转义序列?

  • 3

有没有办法让终端显示原始转义序列?(例如用于控制颜色的那些)

我遇到了这个 UNIX.SE 问题,并想过滤“红色”输出(按颜色过滤命令输出)

但是,答案中的命令不适用于我的输出(例如git status“未跟踪文件”中的红色)。他们确实为那里的例子工作echo -e '\033[00;31mtest\033[00m' | grep --color=none '[[:cntrl:]]'。过滤grep --color=none '[[:cntrl:]]'我的输出,但也显示其他颜色的文本。

我猜我看到的红色一定是不同于 的红色\e[31m。

有没有办法让终端输出原始转义序列?(这样我就可以使用正确的序列来过滤我看到的特定红色)

(重击,Ubuntu 18.04)

- 更新 -

为了澄清起见,我的问题是如何显示原始转义序列。

@egmont 使用script工作的答案。基本上,我只需要使用script记录输出并使用上述问题的答案之一来查找红色文本,例如:

script /tmp/a.txt
git status
exit
cat /tmp/a.txt | grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'

其他答案/评论指出我的使用git没有通过管道获得颜色也是正确的。

terminal
  • 2 个回答
  • 1744 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve