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);