【问题标题】:I can't use sed or jq with variables including whitespaces [duplicate]我不能将 sed 或 jq 与包括空格在内的变量一起使用 [重复]
【发布时间】:2022-01-26 18:37:47
【问题描述】:

我想在 shell 脚本中的 json 文件中添加几个字段。这两个文件的值都包含在一个参数中,似乎没有办法让 sed 或 jq 使用这些值。我到处都用简单的双引号,但不能让它工作。

sh myscript.sh 'value' 'second value'

firstValue=$1
secondValue=$2

jq '.firstField="'$firstValue'" | .secondField="'$secondValue'"' $jsonFileAddress
sed -i '$s/}/,"firstField":"'$firstValue'","secondField":"'$secondValue'"}/' $jsonFileAddress

【问题讨论】:

  • 请尽可能遵循minimal reproducible example 准则。特别是,有关 $jsonFileAddress 文件内容的一些详细信息会很有帮助。
  • 当您执行'something'$var'and more' 时,$var 的扩展不被引用。您需要改用'something'"$var"'and more'。此外,对于 jq,您应该使用 --arg 从 shell 传递值,而不是插值。

标签: shell sed jq


【解决方案1】:

Bengamin W. 的评论让我在使用论点方面走上了正轨。我终于设法将几个新字段附加到现有的 json 文件中,如下所示:

echo $(jq --arg a "$firstValue" --arg b "$secondValue" '.firstField=$a | .secondField=$b' $jsonFileAddress) > $jsonFileAddress

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 2014-04-19
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多