【问题标题】:bash, change line in json filebash,更改 json 文件中的行
【发布时间】:2018-06-12 03:05:08
【问题描述】:

每个人。

我有一个 json 文件:

{
     "id" : "123",
     "firstname" : "john",
     "lastname" : "doe",
     "tel" : "123"
}

字段可以有任何值。

有没有办法使用 sed、awk 或其他任何东西来更改此文件中的一行,例如:

"firstname" : "john" -> "firstname" : "bob"

值可以是任意值。

提前致谢。

【问题讨论】:

  • 糟糕,您忘记发布代码了! StackOverflow 旨在帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码好。元代码甚至可以展示您认为程序应该如何工作,即使您不知道如何编写它。

标签: json bash awk sed


【解决方案1】:

虽然我认为 json 文件应该由不同的编辑器处理,但由于您在此处标记了 awk,因此请在此处提供帮助。

awk '/"firstname"/{$3="\042bob\042\054"} 1' Input_file

输出如下。

{
     "id" : "123",
"firstname" : "bob",
     "lastname" : "doe",
     "tel" : "123"
}

如果您想将输出保存到 Input_file 本身,那么您也可以添加 above_command > temp_file && mv temp_file Input_file

编辑:另外,如果您想保留该行的初始空间,您也可以尝试跟随。

awk '/"firstname"/{$1="     "$1;$3="\042bob\042\054"} 1'   Input_file

然后输出如下。

{
     "id" : "123",
     "firstname" : "bob",
     "lastname" : "doe",
     "tel" : "123"
}

【讨论】:

    【解决方案2】:

    用 jq 更新 json 文件中的值:

    jq '."firstname" = "bob"' file
    

    输出:

    { “id”:“123”, “名字”:“鲍勃”, "姓氏": "doe", “电话”:“123” }

    【讨论】:

      【解决方案3】:

      awk 中的另一个。使用sub() 和正则表达式将记录上最后引用的字符串替换为字符串filename

      $ awk '/firstname/{sub(/\"[^\"]*\",?$/,"\"bob\"")}1' file
      {
           "id" : "123",
           "firstname" : "bob"
           "lastname" : "doe",
           "tel" : "123"
      }
      

      【讨论】:

        【解决方案4】:

        它也适用于 nawk 和 mawk。

            awk '{sub(/john/,"bob")}1' file
        
        output
        {
             "id" : "123",
             "firstname" : "bob",
             "lastname" : "doe",
             "tel" : "123"
        }
        

        【讨论】:

          猜你喜欢
          • 2014-09-16
          • 1970-01-01
          • 2015-09-23
          • 1970-01-01
          • 2018-10-02
          • 2017-12-13
          • 1970-01-01
          • 1970-01-01
          • 2016-07-23
          相关资源
          最近更新 更多