로그 파일에서 일부 부분 삭제

로그 파일에서 일부 부분 삭제

공백으로 정의된 열(7번째 열:/user1/index...)의 일부를 삭제하고 싶습니다. 이것은 내 로그 파일의 예입니다.

192.xx.xxx - - [07/Apr/2017:14:21:15 +0200] "POST /user1/index.php?m=xxxxx&doajax=do_ajax_request&action=xxxx HTTP/1.1" ...
192.xx.x.xx - - [07/Apr/2017:14:21:15 +0200] "GET /user2/index.php?m=xxxxx&doajax=do_ajax_request&action=xxxxx HTTP/1.1".... 

나는 단지 요청을 분석하고 싶기 때문에 user1과 user2를 의미하는 모든 사용자를 삭제하고 싶습니다. 사용자는 중요하지 않습니다.

192.xx.xxx - - [07/Apr/2017:14:21:15 +0200] "POST /index.php?m=xxxxx&doajax=do_ajax_request&action=xxxx HTTP/1.1" ...
192.xx.x.xx - - [07/Apr/2017:14:21:15 +0200] "POST /index.php?m=xxxxx&doajax=do_ajax_request&action=xxxxx HTTP/1.1".... 

요청(/index.php?m=xxxx) cat /var/log/test.log|을 추출하기 위해 이 명령을 사용하려고 했습니다. {$7 인쇄}'| awk -F/ '{print $3}' 하지만 내 요청을 찾을 수 있는 7번째 열에서 이 요청을 바꾸는 방법을 모르겠습니다. 감사합니다.

답변1

sed 's,POST /[^/]*/,POST /,'  logfile | awk ... 

또는 기본 필드 구분 기호(FS)를 사용하는 경우 awk 스크립트에서

sub ("POST /[^/]*/", "POST /", $7) ; 

답변2

아래 sed 옵션을 시도해 볼 수 있습니다.

sed -i 's:/[a-zA-Z0-9]*/:/:2' logfile

여기서는 '/'로 시작하고 알파벳과 숫자(사용자 이름)가 있고 '/'로 끝나는 패턴을 찾고 파일의 각 줄을 '/'로 바꿉니다.

또는

sed -i 's: /[a-zA-Z0-9]*/:/:2' logfile

여기서 첫 번째 명령과의 유일한 차이점은 줄의 첫 번째 /user* 앞에도 공백이 필요하다는 것입니다.

관련 정보