sde
is not sed
. It's a structured data editor for CLI.
Many people asked for a simple JSON in-place editing and jq
was the solution:
- Modify a key-value in a json using jq in-place
- How to modify a key's value in a JSON file from command line
jq '.address = "abcde"' test.json|sponge test.json
Does this seem readable or elegant to you?
How about this instead:
sde address abcde test.json
sde
is not a substitute for jq
or sed
.
It allows simple in-place JSON/YAML value changes, for structured data.
{
"name":"John",
"age":31,
"city":"New York",
"extra": {
"gender": null
}
}
database:
user: example
password: secret
sde name Jack data.json
sde extra.gender male data.json
sde database.user john data.yml
It is possible to modify data in arrays using a dotted notation. Let's take another sample:
{
"users": [
{
"username": "foo",
"enabled": true
},
{
"username": "bar",
"enabled": true
}
],
}
We can set the first user's enabled
property to false
:
sde users.0.enabled false data.json
sudo yum -y install https://extras.getpagespeed.com/release-latest.rpm
sudo yum -y install sde
Installing with pip
is easiest:
pip install sde
Quoting is avoided for null
, true
, false
, and numeric values.
To ensure that a given value is quoted, use -s
(or --string
) option:
sde -s key null file.json
If you must edit the file, by ensuring to update only the existing key, use -e
(--must-exist
)
option. The program will exit without adding the key which doesn't exist.
sde -e key val file.json
If the data is unchanged after running sde
(values already match), you can force
a failure exit code 2
by passing the -m
option:
sde -m key sameval file.json
# > exit code 0
sde -m key sameval file.json
# > exit code 2
echo $json | sde name Jack
sdg name data.json