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.jsonDoes this seem readable or elegant to you?
How about this instead:
sde address abcde test.jsonsde 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: secretsde name Jack data.json
sde extra.gender male data.json
sde database.user john data.ymlIt 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.jsonsudo yum -y install https://extras.getpagespeed.com/release-latest.rpm
sudo yum -y install sdeInstalling with pip is easiest:
pip install sdeQuoting 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.jsonIf 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.jsonIf 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 2echo $json | sde name Jacksdg name data.json