for(int i=0; i<oldmethod(a, 7); i++) {
sum += oldmethod(b*b+i-3, i%a);
---->
for(int i=0; i<newmethod(7, 0, a); i++) {
sum += newmethod(i%a, 0, b*b+i-3);
我有
sed 's/old(\([-a-zA-Z 0-9./*+]*\),\([-a-zA-Z 0-9./*+]*\))/new(\2, 0, \1)/'
但它只改变了第一个旧方法,比如
for(int i=0; i<newmethod(7, 0, a); i++) {
sum += oldmethod(b*b+i-3, i%a);
答案1
第二行中的参数之一是i%a
。这不会与您的正则表达式匹配,因为您尚未包含%
在您的字符类中[-a-zA-Z 0-9./*+]
。尝试
sed 's/oldmethod(\([-a-zA-Z 0-9./*+%]*\),\([-a-zA-Z 0-9./*+%]*\))/newmethod(\2, 0, \1)/'
您可能会发现使用您未考虑过的其他字符的更多实例,例如_
在变量名称中或(
对)
其他函数的嵌套调用中。当遇到此类用途时,您必须不断扩展子表达式。
答案2
更通用的可能性:
sed -E 's/old([^,]*\()([^,])*, ([^)]*)\);/new\1\3, 0, \2);/' file
输出:
for(int i=0; i<newmethod(7, 0, a); i++) {
sum += newmethod(i%a, 0, b*b+i-3);