코드를 편집하기 위해 "sed"를 사용할 때 발생하는 문제

코드를 편집하기 위해 "sed"를 사용할 때 발생하는 문제
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);

관련 정보