如何将“wget”添加到“jq”输出的每一行的开头?

如何将“wget”添加到“jq”输出的每一行的开头?

以下命令:

jq ".[] | .file.url_private_download" *json

生成许多​​行,其形式为:

"https://files.slack.com/files-pri/T27SFGS2W-F78LH1DN2/download/img_1964.jpg?t=xoxe-243624297126-248125875671-248125975751-cee1f8d9a1"

在每一行前面添加 wget 命令的最简单方法是什么?

非常感谢

答案1

这是您的命令,仅进行了一些修改:

jq -r '.[] | @sh "wget \(.file.url_private_download)"' *json

变化:

  • 用于-r获取解码字符串作为输出,而不是 JSON 编码字符串。

  • 创建以 开头的字符串,wget后跟结构中所需的值,用于\(...)将文档中的值插入到字符串中。

  • 用于@sh正确引用 shell 生成的字符串。这可确保每个字符串中的内插值都被安全地引用以在 shell 中使用。

使用上述命令,包含您显示的 URL 的条目预计会生成以下行作为输出:

wget 'https://files.slack.com/files-pri/T27SFGS2W-F78LH1DN2/download/img_1964.jpg?t=xoxe-243624297126-248125875671-248125975751-cee1f8d9a1'

答案2

您可以使用xargs在每行前面添加您想要的命令:

jq ".[] | .file.url_private_download" *json | xargs -n1 /bin/echo "wget"  

答案3

您可以用来sed重写每行的开头:

jq ".[] | .file.url_private_download" *json  | sed 's/^/wget /'

这里用任何替换模式“替换”行的开头wget

wget所有文件:

jq ".[] | .file.url_private_download" *json  | wget -i -

相关内容