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 문자열로 일괄 치환한 결과.


꼼수가 날로 진화한다.

댓글 없음:

댓글 쓰기

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