从txt文件中替换jq中的值

问题描述 投票:0回答:1

我正在执行下面的jq

jq '.backups[] | select(.resource_name == "resource_name") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4

有没有办法用文本文件中的字符串替换 .resource_name 字段,并为 txt 文件中的每一行替换执行 jq

例如,我有 list.txt 文件,其中包含以下内容 苹果 芒果 葡萄

我希望 jq 命令被替换为如下:

jq '.backups[] | select(.resource_name == "**apple**") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4
bash sed jq substitution
1个回答
0
投票

这可能对你有用(GNU 粘贴和 sed 或并行):

cat <<\! >command.txt
jq '.backups[] | select(.resource_name == "resource_name") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json
!

cat <<\! >list.txt
apple
mango
grape
!

sed -n 'r command.tx' list.txt | paste - list.txt | sed -E 's/".*"(.*)\t(.*)/"**\2**"\1/e'

将 jq 命令放入文本文件中

将列表放入文本文件中。

应用管道 sed/paste/sed 调用。

第一次 sed 调用,创建一个列表长度的命令文件。

调用粘贴,附加由制表符分隔的列表。

第二次调用 sed,使用模式匹配来替换然后评估结果行。

另一个解决方案是使用 GNU 并行:

parallel -k jq '.backups[] | select(.resource_name == "**{}**") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json :::: list.txt
© www.soinside.com 2019 - 2024. All rights reserved.