본문 바로가기

초보자를 위한 정규 표현식

제 블로그를 계속 읽어오신 분이면서 개발자라면 얼마전 제가 썼던 고수를 위한 고전 에디터 vim 포스팅을 기억하실 겁니다. 이 글은 사실 오랫동안 머릿속으로 구상해온 글입니다. 이런식의 글을 한번 써보면 좋겠다~ 하고 오랫동안 머릿속에 구상한 글들은 대부분 반응이 좋습니다. 왜냐하면 생각을 표현하는 글 역시 오래 숙성될수록 맛이 있는 김치와 된장, 또는 와인과 비슷하기 때문입니다. 오랫동안 구상하고 가다듬을수록 당장 급하게 쓸때보다는 좀더 글이 깔끔해지고 깊이가 느껴질 것 입니다.

vim글도 반응은 좋았습니다. IT개발자를 위한 마니아적인 성격의 글임에도 당시 올블로그 오늘의 추천글 2위에 올랐습니다. 여기까지 말하면 으쓱~ 자랑할만 합니다. 그러나 실상은 창피했습니다~ 진짜 고수들의 예리한 댓글 지적을 받았습니다. 반론의 여지도 없는 예리한 지적에 머리를 긁적였습니다.

당시 vim글에서 저는

private String id;
private String password;
private String loginType;
private String telephone;
private String handphone;
private String addr1;
private String addr2;
private String email;
private String fax;
private String company;
문자열 을
System.out.println("id ["+id+"]");
System.out.println("password ["+password+"]");
System.out.println("loginType ["+loginType+"]");
System.out.println("telephone ["+telephone+"]");
System.out.println("handphone ["+handphone+"]");
System.out.println("addr1 ["+addr1+"]");
System.out.println("addr2 ["+addr2+"]");
System.out.println("email ["+email+"]");
System.out.println("fax ["+fax+"]");
System.out.println("company ["+company+"]");

문자열로 한방에 바꾸는 방법을 설명했는데, vim의 매크로 기능을 이용하여 한방에 바꾸는 방법을 설명했습니다. 다양한 키 조합을 쓰는 것이 약간 복잡해 보일 수 있습니다.


그런데 댓글에서 개발자들은 이 문제를 단 한줄로 해결합니다.

쿠크다스님 : 치환기능을 이용하면 좀 더 간단하게 해결할 수 있을 것 같은데요. 백 레퍼런스라는 걸 쓰면 될 겁니다.

골빈해커님 : :%s/private\ String\ \(\w\+\)/System\.out\.println\("\1\ \["\+\1\+"\]"\)/g

(_ _);;;

daewonyoon님 : 저라도 골빈해커님 같이 치환으로 했었겠네요. (블럭지정해서 :<> 로 시작하게) 윈도우 상에서 비주얼 스튜디오로 주로 작업하지만, 대규모의 치환같은 경우에 주로 gvim 을 불러서 작업하네요.

아하~ 정규식을 쓰면 한방에 해결하는구나~ 사실 고수 입장에서는 아무것도 아니지만 저 입장에서는 바다가 깊은지 고수들의 능력이 더 깊은지 해아리기가 어렵다는 것을 다시 절감했습니다.

위의 골빈해커님의 한줄원샷 치환을 보면, 그야말로 정규식을 쓸 경우 어떠한 텍스트라도 자유자재로 다루는 힘을 갖는 것 같습니다. 마치 텍스트를 장난감 가지고 노는 것 같습니다. 그래서 저도 이참에 정규식을 정복하려고 합니다. 마침 이런때~! IBM developerWorks에 바로 나를 위한 기사가 떴습니다.

정규식은 물론 정규식을 응용한 grep 파일검색 sed로 파일 편집하기등의 맞춤기사를 찾았습니다.

초보자를 위한 유닉스 팁과 기교, Part 3: 필터와 정규 표현식