bash,在json文件中更改行

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

大家。

我有一个json文件:

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

字段可以包含任何值。

有没有办法使用sed,awk或其他任何东西来改变这个文件中的一行,如:

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

值可以是任意值。

提前致谢。

json bash awk sed
4个回答
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"
}

3
投票

使用jq更新json文件中的值:

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

输出:

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

0
投票

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

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

0
投票

它也适用于nawk和mawk。

    awk '{sub(/john/,"bob")}1' file

output
{
     "id" : "123",
     "firstname" : "bob",
     "lastname" : "doe",
     "tel" : "123"
}
© www.soinside.com 2019 - 2024. All rights reserved.