티스토리 뷰

728x90

비주얼스튜디오를(이하 VS) 사용하는 VS 고수분들은 자주 사용하는 기능 일 수 있지만 아직 이 기능을 접해보지 않은 개발자에게는 마술과 같은 결과를 도출할 수 있는 방법입니다.


이해를 돕기위해 이런 경우를 상정해 볼까합니다.

PutLog( ERROR, 1, "Program started!!!"); 

같은 형태로 프로그램 실행중 계속적으로 로그를 찍는 프로그램을 쭉 작성해 놓았습니다. 전체 프로그램 개수와 라인은 몇 천일지 몇 만 일지 모르고요. PutLog함수 호출시 첫번째 파라미터는 로그의 종류, 두번째는 심각성을 설정하기로 했었는데 #define문을 찾기도 귀챦고 대부분 GENERAL(1)이어서 Name을 쓰지 않고 그냥 값을 쓴 경우도 허다한 상황이 입니다. 그런데, 코드 리뷰 과정에서 코딩 규칙을 지키지 않은 것을 지적받아 일괄로 수정하려고 합니다.


아시다시피 Ctrl+Shift+F 로 전체솔루션을 대상으로 검색하면 "Putlog( ..." 형태로 사용한 것은 모두 찾을 수 있지만 상수 이름을 쓰지 않고 두번째 파라미터 값을 1로 호출한 것을 찾아 일괄 변환하기란 막막할 수 있습니다. 왜냐하면 괄호 다음에 공백을 둔 경우도 있고 붙여 쓴 경우도 있고, ERROR만 있는 것도 아니고, 두번째 파라미터를 모두 1로 쓴것도 아니고......경우의 수가 너무 많은 복잡한 상황이라는 것이죠. 사람이 일일이 확인 하는 방법은 오류가 있을 수도 있습니다.


이런 경우에 사용할 수 있는 것이 정규식 검색과 치환입니다.



복잡해 보이지만 찾을 내용에 입력한 "PutLog[ ]*\([ ]*{[A-Z]+}[ ]*,{[1 ]+},"를 설명해 드리면 다음가 같습니다.(알고 보면 단순합니다)


    • PutLog는 그냥 문자열 이고요

    • 다음에 있는 [ ]*는 공백 문자가 0이상, 즉 공백이 없거나 공백이 여러개 있는 한 그룹을 지칭합니다. 공백한개나 열개나 모두 [ ]*에 걸립니다.

    • \(는 그냥 괄호를 지칭하는데 정규식의 특수문자로 괄호도 쓰기 때문에 \로 Escape한 것입니다.

    • { } 묶음은 태그식이라고 해서 무엇이 걸릴지 모르겠지만 치환할때 "몇번째 태그식"의 형태로 지정할 수 있습니다.

    • [A-Z]+는 대문자 스트링을 지정하는데 [] 그룹내에 A부터 Z까지라는 범위에 있는 단어가 1개 이상인 경우가 걸립니다. 만약에 소문자, 숫자, underscore(_)도 포함한다면 [a-aA-Z0-9_]+ 라고 하면 되겠죠.

    • ,는 그냥 콤마 문자를 의미합니다. [ ]*가 중간 중간에 계속 있는 이유는 공백 기술을 혹시나 불규칙하게 한 경우를 감안한 것입니다.

    • [1 ]+는 공백이나 1로 구성된 단어를 의미합니다. 본 검색에서 두번째 파라미터를 1로 기술한 것을 찾으려 하므로...


정규식을 통해 솔루션 전체 검색을 하려면 Ctrl+Shift+F를 클릭한 다음 위의 그림처럼 찾기 옵션 "사용"을 체크하고 방법으로 정규식을 선택하면 됩니다. 정규식 문법을 모를때는 찾을 내용 옆에 있는 화살표 버튼을 클릭하면 됩니다.


안전한 치환을 위해 우선 검색을 먼저 해봅니다.


정상적으로 솔루션 검색이 되었다면 하단 찾기 결과창에 해당 파일과 라인 정보를 포함하여 검색내용을 리스팅해주므로 각각을 클릭해 보아 정상적으로 원하는 검색이 이루어 졌는지 확인합니다.




■ 일괄 치환하기


Ctrl+Shift+H를 클릭하면 직전에 검색했던 검색 정보를 그대로 가져가면서 연속적인 작업을 할 수 있습니다. 물론 치환 대상은 전체 솔루션으로 솔루션에 포함된 모든 파일을 뒤져가면 한번에 치환할 수 있습니다.



검색 때와 마찬가지로 찾기 옵션의 "사용"이 체크 되어 있고 정규식으로 선택되어 있는지 확인합니다. 치환 옵션을 모를 때는 위의 그림과 같이 바꿀 내용 옆에 있는 화살표를 눌르면 몇번째 태그식 정도만 확인하면 됩니다.


위에 기술한 바꿀내용 "PutLog( \1, GENERAL_ERROR,"을 설명하면 \1만 제외하고는 나머지는 모두 단순 스트링입니다. \를 통한 Escape도 필요없습니다. \1은 찾을내용의 첫번째 태그식에 걸린 내용, 즉 {[A-Z]+}를 의미하면 PutLog의 첫번째 파라미터는 그대로 가져오라는 의미입니다.


검색 및 치환 준비가 되었으면 우선은 "다음찾기"버튼으로 검색 대상을 1개 찾아봅니다. 검색이 맞으면 "바꾸기"로 치환이 원하는 대로 수행되는지 1개를 치환해 봅니다. 다시 다음 찾기-바꾸기로 두어개 문제 없이 검색 및 치환이 수행되면 "모두 바꾸기"로 모든 파일을 뒤져 일괄 치환하면 됩니다.


작업할 때는 혹시나 모르니 백업하고 하세요....




728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함