我有几个.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?
使用jq:
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)
| 归档时间: |
|
| 查看次数: |
3869 次 |
| 最近记录: |