2018년 5월 3일 목요일

VIM 꼼수의 발견

전에 VIM 사용 설명서(secure 로그 분석 - 6th)란 글에서 ID 문자열을 추출할 때, 양식별로 작업을 진행하느라 많은 노가다가 필요했었다. 대략 재현을 해보자면, 일단 ID 정보가 없는 줄 삭제.



이후에는
① 'for ID' 양식을 포함하지 않는 줄 삭제
② ID 추출 후, 원복(undo)하는 과정을

모든 양식('for user ID', 'for invalid user ID', 'invalid user ID', 'about user ID')별로 반복했었다. 귀찮은 건 물론이고, 엑셀에서 순서대로 정리하는 것도 일. 찬란한 인류문명 발전의 원동력은 귀차니즘. 더 편한 방법을 찾아보자.


VIM 정규표현식 '\v(for invalid user|for user|for|invalid user|about user)\s[^ :]+'의 검사 결과 끝에 구분기호 'ㅋ'을 추가했다.


'ㅋ' 이후의 문자열은 필요없으니 삭제.



이제 ID 문자열 왼쪽에 있는 문자열만 지우면 된다. ID가 아닌 문자열과 ID는 '공백'으로 구분되니, '공백'으로 끝나는 모든 문자열을 검사해서 삭제.



어우 편해. 하지만 더 격렬하게 편해지고 싶다. 다음은 기존 정규표현식 좌우에 '.*'을 추가한 결과. ID 양식을 포함한 전체 문자열을 검사하고 있다.


그리고 ID 문자열을 검사하는 표현식 '[^ :]+'는 캡쳐그룹을 씌웠다. 검사 결과를 저장하겠다는 얘기. 캡쳐그룹으로 저장된 결과는 역참조를 통해 불러올 수 있다.

두번째 캡쳐그룹에 저장된 ID 문자열

다음은 검사 결과인 전체 문자열을 역참조(\2)를 이용해서 두번째 캡쳐그룹에 저장된 ID 문자열로 일괄 치환한 결과.


꼼수가 날로 진화한다.

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스