본문 바로가기
Linux

[linux] example: sed: -r or -E

by ds31x 2024. 5. 11.

example: sed: -r

sed-r 옵션(또는 GNU sed에서 -E 옵션)은 확장 정규 표현식을 사용할 수 있게 해주는 옵션임.

  • 이 옵션을 사용하면 보다 복잡한 패턴을 더 간단하고 읽기 쉬운 방식으로 작성할 수 있음.
  • -r 옵션은 그룹화, 치환, 범위 지정 등에서 특별한 문자를 이스케이프하지 않아도 됨.

예제1: 복잡한 pattern matching and substitution

0. 예제 파일 내용 (example.txt):

John Smith, Age: 25
Jane Doe, Age: 22
Alex Johnson, Age: 31

1. 이름만 추출하기

이름 부분만 추출하기 위해 다음과 같이 확장 정규 표현식을 사용할 수 있음.
주의할 점은 -r 옵션을 사용하면 괄호와 같은 특수 문자를 escape하지 않아도 됨.

sed -rn 's/^([A-Za-z ]+), Age: [0-9]+/\1/p' example.txt

이 명령은 각 줄에서 "이름" 부분만을 출력합니다.

 

결과:

John Smith
Jane Doe
Alex Johnson

2. 나이만 추출하고 형식 변경하기

나이만 추출하고 "Age"를 제거하여 이름 다음에 괄호 안에 나이를 표시하는 형식으로 변경하려면 다음과 같이 사용가능함.

sed -r 's/([A-Za-z ]+), Age: ([0-9]+)/\1 (\2)/' example.txt

이 명령은 이름 옆에 괄호 안에 나이를 표시합니다.

 

결과:

John Smith (25)
Jane Doe (22)
Alex Johnson (31)

예제: Nginx 로그 파일에서 IP 주소와 요청 경로 추출

예제 Nginx 로그 (nginx_logs.txt):

192.168.1.1 - - [10/Oct/2023:13:55:12 +0000] "GET /index.html HTTP/1.1" 200 612 "-"
192.168.1.2 - - [10/Oct/2023:13:55:15 +0000] "POST /form_submit.php HTTP/1.1" 200 150 "-"
192.168.1.3 - - [10/Oct/2023:13:55:17 +0000] "GET /images/logo.png HTTP/1.1" 404 209 "-"

IP 주소와 HTTP 요청 경로만 추출하기:

sed -rn 's/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) - - \[[^]]+\] "(GET|POST) ([^ ]+) HTTP\/1\.1" [0-9]+ [0-9]+ "-"/\1 \3/p' nginx_logs.txt

 

이 명령은 각 로그 라인에서 IP 주소와 요청 경로를 추출하여 출력함.

 

결과:

192.168.1.1 /index.html
192.168.1.2 /form_submit.php
192.168.1.3 /images/logo.png

'Linux' 카테고리의 다른 글

[Linux] cron and crontab  (0) 2024.06.27
[linux] find 사용법.  (0) 2024.05.11
[linux] example: sed: -f option  (0) 2024.05.11
[linux] example: sed: -e option  (0) 2024.05.11
[linux] example: sed: -n option  (0) 2024.05.11