使用bash查找并替换json文件中的值

Ilk*_*sik 0 bash json

我有几个.json与此类似的文件。

{
    "AcquisitionNumber": 1,
    "TotalReadoutTime": 0.035,
    "IntendedFor": "func/sub-02_task-rest_run-01_bold.nii.gz"
}
Run Code Online (Sandbox Code Playgroud)

我想使用 bash 变量更改“IntendedFor”行中的 sub 编号,循环遍历不同的 subs。例如,如果 sub 是 03:

sub=03
echo $sub
03
Run Code Online (Sandbox Code Playgroud)

如何使用此 bash 变量更改sub-02to的值sub-03

ogu*_*ail 5

使用

jq --arg sub "$sub" '.IntendedFor |= sub("(?<=sub-)[^_]+"; $sub)' file
Run Code Online (Sandbox Code Playgroud)

请参阅此在线示例

请注意,您的jq二进制文件必须使用正则表达式支持编译才能使用sub函数。

并且,您可以使用 for 循环和临时文件实现内联编辑:

sub=03

for jsonfile in *.json; do
    tempfile=$(mktemp -u)
    jq --arg sub "$sub" '.IntendedFor|=sub("(?<=sub-)[^_]+";$sub)' "$jsonfile" > "$tempfile"
    mv "$tempfile" "$jsonfile"
done
Run Code Online (Sandbox Code Playgroud)