- Published on
2025.10.16
[모두의 리눅스] - 13. 정규 표현식
13.1. grep 명령어와 정규 표현식
grep은 문자열을 검색하는 명령어
grep 옵션 검색패턴 파일이름형식으로 grep bash /etc/passwd이라면 /etc/passwd에서 bash라는 문자열을 검색
| 옵션 | 내용 |
|---|---|
| -n | 행 번호를 출력 |
| -i | 대소문자를 구별하지 않고 검색 |
| -v | 검색할 문자열이 나타나지 않는 행을 출력 |
정규 표현식이란
정규 표현식을 사용하면 조건에 맞는 문자열 집합을 표현할 수 있음
*, {, }, $ 등의 기호는 메타 문자로 특별한 의미를 지니며, grep에서 정규 표현식을 사용하고 싶을 때는 셸이 정규 표현식을 확장하지 않도록 'ab*'처럼 작은따옴표로 감싼다.
13.2. 임의의 문자를 지정하는 메타 문자
.은 임의의 문자 하나를 의미.
문자가 아닌 점 기호 자체를 검색하고 싶을 때는 \이스케이프를 붙이면 된다. \.으로 사용
[]는 임의의 문자 하나가 아닌 여러 문자 중 하나를 의미. 이 메타 문자는 괄호 안에 있는 문자 중 하나를 의미. -을 사용해 범위로 지정도 가능
| 메타 문자 | 내용 |
|---|---|
| . | 임의의 문자 하나 |
| [] | []안에 포함된 임의의 문자 하나 |
| [^ ] | []안에 포함되지 않는 문자 |
13.3. 위치를 지정하는 메타 문자
^$로 두 메타 문자를 같이 쓰면 시작이 끝인 행, 즉 빈 행을 의미. 빈 행을 제거하는 용도로 사용할 수 있음.
| 메타 문자 | 내용 |
|---|---|
| ^문자열 | 행의 첫 부분을 의미 |
| 문자열$ | 행의 마지막을 의미 |
13.4. 반복을 지정하는 메타 문자
확장 정규 표현식을 사용할 때는 -E 옵션을 지정해야 한다.
리눅스의 grep(GNU grep)은 -E를 붙이지 않아도 메타 문자에 \를 붙여 확장 정규 표현식을 사용할 수 있지만 다른 명령어에서는 사용할 수 없으므로 추천하지 않음.
| 기본 정규 표현식 | 확장 정규 표현식 | 의미 |
|---|---|---|
| * | * | 0회 이상 반복 |
| 없음 | + | 1회 이상 반복 |
| 없음 | ? | 0회 또는 1회 반복 |
\{m,n\} | {m,n} | m회 이상 n회 이하 반복 |
\{m\} | {m} | m회 반복 |
\{m,\} | {m,} | m회 이상 반복 |
13.5. 그 외의 메타 문자
| 기본 정규 표현식 | 확장 정규 표현식 | 의미 |
|---|---|---|
| \(\) | () | 그룹화할 때 사용 |
| 없음 | | | 여러 정규 표현식을 OR 조건으로 연결 |