Tom*_*ley 2 regex bash json sed
我需要编辑一个JSON文件,使用sed,将一些数据添加到文件中.JSON如下:
{
'name':
// more attributes that are already filled in
}
Run Code Online (Sandbox Code Playgroud)
我写了这个sed命令试着这样做:
sed "s/(\'name\':)/\1\"hello\"\,/g" /path/to/file.json
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到此错误:
sed: \1 not defined in the RE
Run Code Online (Sandbox Code Playgroud)
预期结果是:
{
'name': "hello",
// more attributes here, left untouched
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个不好的方法,但我不认为我能够使用这样的工具,jq因为该文件将在服务器上编辑,我无法jq在服务器上安装.如果有人有更好的解决方案,我会非常有兴趣听到它.谢谢!
如你所说,sed这里不是正确的工具,而是使用适当的JSON解析器:
$ cat json
{
"name": "foobar"
}
Run Code Online (Sandbox Code Playgroud)
$ jq '.name |= "qux"' json | tee json
Run Code Online (Sandbox Code Playgroud)
(最新的tee工作小文件)
perl -i -MJSON -0ne '
my $DS = decode_json $_;
$DS->{name} = "qux";
print encode_json $DS
' json
Run Code Online (Sandbox Code Playgroud)
删除-i,如果你想不编辑文件来测试命令开关到位
$ cat json
{
"name": "qux"
}
Run Code Online (Sandbox Code Playgroud)
你的反斜杠在错误的地方。'不需要转义,但括号需要转义。这有效:
sed "s/\('name':\)/\1\"hello\"\,/g" /path/to/file.json
Run Code Online (Sandbox Code Playgroud)
注意:我假设 file.json 不是 json 文件,而是特制的模板,否则此替换没有任何意义(结果不会是 JSON)。使用 sed 处理 JSON 文件肯定是一个坏主意,因此如果您尝试修改 JSON 而不是生成它,请查看jqor so。