![sed를 사용하여 코드 리팩터링](https://rvso.com/image/76408/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%BD%94%EB%93%9C%20%EB%A6%AC%ED%8C%A9%ED%84%B0%EB%A7%81.png)
파일의 문자열을 재정렬/리팩터링하는 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
사용하여 와 같은 단어의 일부로 포함되지 않고 자체적으로 "단어"인 경우 에만 변경되도록 합니다 .\<
\>
old
new
cold
$ sed -e 's/\<old\>/new/g' foo.c
for(int i=0; i<new(a, 10); i++)
{
sum += new(c*c, i*a)
}
-i
stdout으로 인쇄하는 대신 파일을 내부에서 변경하려면 GNU sed의 옵션을 사용하십시오 .
경고: 이 sed
스크립트는 변경됩니다.모두/\<old\>/
소스 파일에서 발생합니다 . 이는 변경하려는 것보다 훨씬 더 많을 수 있습니다.
답변2
GNU sed:
/bin/sed -ire \
's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
*.c </dev/null