bash,在json文件中更改行

时间:2018-01-02 11:50:00

标签: json bash awk sed

大家。

我有一个json文件:

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

字段可以包含任何值。

有没有办法使用sed,awk或其他任何方法更改此文件中的行,如:

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

值可以是任意值。

提前致谢。

4 个答案:

答案 0 :(得分:3)

使用jq:

更新json文件中的值
jq '."firstname" = "bob"' file

输出:

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

答案 1 :(得分: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 :(得分:0)

awk中的另一个人。使用sub()和regex替换记录上最后引用的字符串,其中包含字符串filename

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

答案 3 :(得分:0)

它也适用于nawk和mawk。

var