sed를 사용하여 코드 리팩터링

sed를 사용하여 코드 리팩터링

파일의 문자열을 재정렬/리팩터링하는 sed 스크립트를 어떻게 작성합니까?

내 파일의 내용은 다음과 같습니다.

    for(int i=0; i<old(a, 10); i++)
    {
      sum += old(c*c, i*a)
    }

그리고 수정된 내용을 다음과 같이 만들고 싶습니다.

    for(int i=0; i<new(10,0,a); i++)
    {
      sum += new(i*a, c*c)
    }

답변1

다음은 GNU에서 작동합니다. 및 단어 경계 표시를 sed사용하여 와 같은 단어의 일부로 포함되지 않고 자체적으로 "단어"인 경우 에만 변경되도록 합니다 .\<\>oldnewcold

$ sed -e 's/\<old\>/new/g' foo.c 
    for(int i=0; i<new(a, 10); i++)
    {
      sum += new(c*c, i*a)
    }

-istdout으로 인쇄하는 대신 파일을 내부에서 변경하려면 GNU sed의 옵션을 사용하십시오 .

경고: 이 sed스크립트는 변경됩니다.모두/\<old\>/소스 파일에서 발생합니다 . 이는 변경하려는 것보다 훨씬 더 많을 수 있습니다.

답변2

GNU sed:

/bin/sed -ire \
 's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
 *.c </dev/null

관련 정보