LabHub

vim 과 tmux · vim 실전: 검색·치환·매크로 · 실습

vim 검색과 치환

LabHub 에서 이어서 보기

목표

vim 안에서 로그 파일을 필터링하고 치환하는 작업을 ex 명령으로 수행하고, 그 명령을 파일로 남겨 재현 가능하게 만듭니다. 재료는 /opt/lab/data/app.log (480줄, IP 날짜 메서드 경로 상태코드 [ERROR] 형식)입니다.

왜 중요한가

ex 명령은 전부 범위 + 동작 구조입니다. :%s/.../.../g, :5,20s/..., :'<,'>s/... 는 같은 규칙의 세 사례입니다. 여기에 줄 필터 :g(패턴에 맞는 줄)와 :v(맞지 않는 줄)가 더해지면 로그 가공의 대부분이 끝납니다. 특히 조심할 것은 g 플래그를 빼면 줄마다 첫 매치만 바뀐다는 점과 :g:v 가 정확히 반대라는 점입니다. 이 둘이 조용히 잘못된 결과를 만드는 대표적인 원인입니다.

단계

/root/vimp 디렉터리에서 작업합니다. .ex 파일에는 편집 명령만 넣고 저장·종료 명령은 넣지 마세요.

1. /opt/lab/data/app.log/root/vimp/work.log 로 복사하세요.
2. /api/pay 가 들어간 줄이 몇 개인지 세어 /root/vimp/count.txt 에 숫자만 적으세요.
3. 상태코드가 500마지막 줄의 줄 번호를 /root/vimp/last500.txt 에 적으세요.
4. IP 의 마지막 옥텟을 xxx 로 바꾸는 명령을 /root/vimp/mask.ex 에, 그 결과를 /root/vimp/masked.log 에 저장하세요. (10.1.2.310.1.2.xxx 가 됩니다)
5. ERROR없는 줄을 지우는 명령을 /root/vimp/errors.ex 에, 결과를 /root/vimp/errors_only.log 에 저장하세요.
6. 줄 끝이 200 인 줄만 지우는 명령을 /root/vimp/drop200.ex 에, 결과를 /root/vimp/no200.log 에 저장하세요.
7. 두 번째 필드(날짜)를 지우는 명령을 /root/vimp/nodate.ex 에, 결과를 /root/vimp/nodate.log 에 저장하세요.
8. 위 세 가지를 모두 적용하는 명령들을 /root/vimp/report.ex 에 넣고, 결과를 /root/vimp/report.log 에 저장하세요. 최종 형태는 10.1.2.xxx GET /api/item 500 ERROR 입니다.

참고

단계 8개

  1. 작업용 사본 만들기
  2. 매치 개수만 세기
  3. 마지막 500 응답 찾기
  4. IP 마스킹 치환
  5. ERROR 줄만 남기기
  6. 정상 응답 제거하기
  7. 날짜 컬럼 지우기
  8. 3단 변환을 한 스크립트로