2011-07-29 6 views
1

저는 C++ 사용자이고 을 사용하는 코드를 사용하여 STL 벡터를 확인합니다. 이제 표준 []으로 변경하고 싶습니다. 누구든지이 일을 할 수있는 스크립트를 알고 있습니까? 수퍼 일반 스크립트 일 필요는 없습니다. 대부분의 경우는 .at(i) 또는 아마도 .at(a*i+j)입니다.하지만 너무 많은 수작업으로 처리해야합니다.내 코드 전체에서 .at()를 []로 바꿉니다.

+1

's, \. at (i \), \ [i \], g'의 문제점은 무엇입니까? –

+1

이것은 하나의 변수 이름으로 만 작동합니다. 그는 아마도 역 참조를 사용하는 무언가를 원할 것입니다. –

+1

왜 이것을하고 싶습니까? 성능 개선을 위해 변환 전과 후에 차이점을 확인하십시오. 차이가 20 % 미만이면 변경 사항을 되돌릴 것을 권장합니다. –

답변

6

사용이 펄 연산자 :

s/\.at\(([^)]+)\)/[$1]/g 

펄의 s/// 연산자는 "대체"(찾기/바꾸기)입니다. //의 첫 번째 세트에서 일치시킬 정규 표현식을 지정합니다. 두 번째 //는 해당 경기를 대체하거나 대체 할 텍스트입니다.

이 경우 ".at (아무거나 가까운 괄호)"의 인스턴스를 찾고 "[그 뉘앙스]"로 바꿉니다. 한 - 라이너로

,

perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp 

당신은 비주얼 스튜디오은 찾기에서 이렇게 사용하는 경우/프롬프트 교체 : \[\1\]

: \.at\({[^)]+}\) 가 교체 :

은 무엇 찾기

정규 표현식을 사용하도록 설정하면 좋은 결과를 얻을 수 있습니다.

+0

s ///를 사용하는 방법을 추가 했어도 괜찮습니까? – ikegami

+0

아니, 고마워. 대답을 개선하는 것은 결코 문제가되지 않습니다. – kevlar1818

1
sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp 

은 대부분의 간단한 표현식에서 작동해야합니다. 그러나 at()에 매개 변수 안의 괄호를 사용하면 작동하지 않습니다.

grep 'at(.*).*)' *.h *.cpp 

이러한 경우를 식별하고 실행이 나오지 스크립트 말했다 전에 변환 할 수 있습니다.

P. sed가 여기와 같은 위치에서 작동하도록하려면 백업을 주변에 두십시오 (예 : VCS를 통해).

편집 : 게시하기 전에 sed 스크립트를 테스트해야합니다. 지금 수정되어 테스트되었습니다.

관련 문제