2018년 6월 10일 일요일

VIM 꼼수의 발견 - 2nd

로그 분석이 아닌, 데이터 분석을 하려면 컴퓨터가 읽기(계산하기) 좋게 로그 구조를 바꿀 필요가 있다. 다음은 Snort 데이터베이스에서 특정 로그를 조회할 때, replace 함수를 이용해서 줄바꿈 문자(0D0A)를 공백(20)으로 치환한 결과.


로그 구조가 1줄 단위이기 때문에 테이블 구조로 바꾸기 쉽다. 그리고 테이블 구조로 바꾸면 통계 분석이 쉬워진다.


다음은 replace 함수를 이용해서 줄바꿈 문자(0D0A)를 공백(20)으로 치환하지 않은 결과.


줄바꿈 문자(0D0A) 때문에 하나의 로그가 4개의 줄 구조를 이루고 있다. 사람이 하나씩 읽어야만 하는 구조.


그런데 가끔 IDS, IPS 로그를 이런 구조로만 저장하는 (데이터 분석이 불가능한) 환경에서 작업해야 할 때가 있다. VIM 노가다가 필요한 순간. 일단 각 로그를 구분해주는 빈 줄을 구분기호(ㅋ)로 치환.


이후 줄바꿈 문자(\n)를 없애버리면 전체 로그가 1줄 구조로 바뀐다.


다음은 미리 입력한 구분기호(ㅋ)를 새 줄을 의미하는 줄바꿈 문자(\r)로 바꾼 결과. 구분기호(ㅋ)마다 엔터키를 입력했다고 생각하면 쉽다.


문제는 로그양이 많아지면 줄바꿈 문자(\n)를 없애는 과정에서 VIM이 가끔 뻗는다.


이런 상황이 발생하면 어쩔 수 없이 로그를 쪼개서 작업하곤 했는데, 혹시나 싶어 구글신께 물어보니 'Join'이란 기능이 있다고 알려 주신다. 다음은 커서가 첫째 줄에 위치한 상태에서 'J(대문자)'를 입력한 결과. 첫째 줄과 둘째 줄이 이어진다. 현재 커서가 위치한 줄과 다음 줄을 이어준다는 얘기.


명령 모드가 아니라 읽기 모드 상태에서 명령어를 입력한다는 사실에 주의. 전체 라인을 하나로 합치려면 커서가 첫째 줄에 위치한 상태에서 전체 줄 개수와 'J'를 순서대로 입력하면 된다. 다음은 '9975J'를 입력한 결과.


파도 파도 끝이 없는 VIM 당신은 대체(..)

관련 글

댓글 없음:

댓글 쓰기

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