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 |