为了提高 FORTRAN 代码的性能,我想置换数组的索引,以便将第 4 个索引移到第二位,例如,我想更改以下行
ts(l,i,j,k) = ts(l,i,j,k1(i,j))
到
ts(l,k,i,j) = ts(l,k1(i,j),i,j)
请注意,这只是一个示例行,索引并不总是称为 i,j,k,l... 我只知道数组的名称和等级。所以我不能只用逗号分隔 4 个参数,因为一个参数也可以是一个带有逗号的矩阵(在上述情况下为 k1(i,j))。所以我的第一个想法
sed -r 's/ts\(([^,]+),([^,]+),([^)]+),([^,]+)\)/ts\(\1,\4,\2,\3\)/g' *.F
在这种情况下失败(上面代码行中的 rhs),因为它给出了:
ts(l,k,i,j) = ts(l,j),i,j,k1(i)
我需要的是一个正则表达式,它仅在打开最多 1 个括号时才拆分我的数组索引。有人可以给我一个提示如何使用 sed/python/perl 做到这一点吗?
最良好的祝愿