본문 바로가기
Linux

[linux] example: sed: -n option

by ds31x 2024. 5. 11.

example: sed: -n option

Nginx의 액세스 로그를 예로 들어 sed 명령어의 사용법을 살펴보는 문서임.


예제 Nginx 액세스 로그

  • 다음은 Nginx 액세스 로그의 간단한 예제임.
  • 각 라인은 웹 서버에 대한 하나의 HTTP 요청을 나타냄.:
192.168.1.1 - - [10/Oct/2023:13:55:12 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
192.168.1.2 - - [10/Oct/2023:13:55:15 +0000] "POST /form_submit.php HTTP/1.1" 200 150 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
192.168.1.3 - - [10/Oct/2023:13:55:17 +0000] "GET /images/logo.png HTTP/1.1" 404 209 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1"
192.168.1.1 - - [10/Oct/2023:13:55:19 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36"

사용 예: sed로 특정 상태 코드의 요청 찾기

404 상태 코드를 가진 요청만 출력하기:

sed -n '/HTTP\/1.1" 404 /p' nginx_access.log
  • 이 명령은 nginx_access.log 파일에서 HTTP 상태 코드가 404인 모든 요청을 찾아서 출력.
  • 위의 예제 파일 기준으로는는 세 번째 라인만 해당.

사용 예: 특정 IP 주소의 요청 추출하기

192.168.1.1 주소에서 온 요청만 출력하기:

sed -n '/192.168.1.1/p' nginx_access.log
  • 이 명령은 nginx_access.log에서 IP 주소가 192.168.1.1인 요청 라인만을 출력.
  • 위의 예제 파일 기준으로는 첫 번째와 네 번째 라인이 출력됨.

사용 예: 요청 경로 변경하기

이미지 파일 요청 경로에서 "/images/"를 "/img/"로 변경하고 결과 출력하기:

sed -n 's|/images/|/img/|p' nginx_access.log
  • 이 명령은 요청된 이미지 파일 경로를 변경하고 해당 변경이 있는 라인만을 출력함.
  • 이 경우 세 번째 라인에서 변경이 일어남.
  • 주의할 것은 substitution에 사용된 패턴에 /가 들어가기 때문에 각 패턴을 구분하는 구분자로 vertical bar |를 사용함.