정규 표현식(Regular Expression, 줄여서 Regex, Regexp)은 문자열의 특정 패턴을 표현하는데 사용되는 강력한 도구입니다. 리눅스 및 유닉스 환경에서는 여러 명령어나 프로그래밍 언어에서 정규 표현식을 사용하여 문자열 처리 작업을 수행합니다.
기본 패턴
. - 임의의 한 문자를 나타냅니다.
^ - 문자열의 시작을 나타냅니다.
$ - 문자열의 끝을 나타냅니다.
* - 앞의 문자(또는 패턴)가 0회 이상 반복되는 패턴을 나타냅니다.
+ - 앞의 문자(또는 패턴)가 1회 이상 반복되는 패턴을 나타냅니다.
? - 앞의 문자(또는 패턴)가 0회 또는 1회 나타나는 패턴을 나타냅니다.
[abc] - 대괄호 안의 문자 중 하나와 일치합니다. (a 또는 b 또는 c)
[^abc] - 대괄호 안의 문자 중 하나와 일치하지 않습니다.
특수 문자
\d - 숫자와 일치합니다.
\D - 숫자가 아닌 문자와 일치합니다.
\w - 단어 문자(알파벳, 숫자, 밑줄)와 일치합니다.
\W - 단어 문자가 아닌 문자와 일치합니다.
\s - 공백 문자(스페이스, 탭, 줄 바꿈 등)와 일치합니다.
\S - 공백 문자가 아닌 문자와 일치합니다.
수량자
{n} - 앞의 문자(또는 패턴)가 정확히 n회 반복되는 패턴을 나타냅니다.
{n,} - 앞의 문자(또는 패턴)가 n회 이상 반복되는 패턴을 나타냅니다.
{n,m} - 앞의 문자(또는 패턴)가 최소 n회, 최대 m회 반복되는 패턴을 나타냅니다.
그룹화 및 선택
(pattern) - 패턴을 그룹화하려면 괄호를 사용합니다.
| - 두 패턴 중 하나와 일치하는 패턴을 나타내려면 파이프(|)를 사용합니다.
주요 리눅스 도구 및 명령어에서의 사용
grep: 파일 내에서 정규 표현식 패턴과 일치하는 줄을 검색합니다.
sed: 문자열을 검색하거나 교체할 때 정규 표현식을 사용합니다.
awk: 패턴 스캔 및 텍스트 처리에 정규 표현식을 사용합니다.
1. 리눅스 정규 표현식: 기본 패턴
grep은 리눅스에서 문자열 검색에 널리 사용되는 명령어로, 정규 표현식을 활용하여 파일 내의 문자열 패턴을 찾아줍니다. grep를 활용하여 기본 패턴을 익혀보겠습니다.
예시 파일 (sample.txt)
hello world
this is a test
hat
hit
hot
history of mankind
that
chat
hats off
"." (점) : 임의의 한 문자를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h.t" test.txt
hat
hit
hot
^ (캐럿) : 문자열의 시작을 나타냅니다.
[Example-Terminal:Documents user]$ grep "^ha" test.txt
hat
$ (달러 기호) : 문자열의 끝을 나타냅니다.
[Example-Terminal:Documents user]$ grep "at$" test.txt
hat
* (별표) : 앞의 문자(또는 패턴)가 0회 이상 반복되는 패턴을 나타냅니다.
[Example-Terminal:Documents user]$ grep "ho*t" test.txt
hat
hot
+ : 앞의 문자(또는 패턴)가 1회 이상 반복되는 패턴을 나타냅니다.
[Example-Terminal:Documents user]$ grep "ho+t" test.txt
hot
? : 앞의 문자(또는 패턴)가 0회 또는 1회 나타나는 패턴을 나타냅니다.
[Example-Terminal:Documents user]$ grep "ho?t" test.txt
hat
hot
[abc] : 대괄호 안의 문자 중 하나와 일치합니다.
[Example-Terminal:Documents user]$ grep "h[aei]t" test.txt
hat
hit
[^abc] : 대괄호 안의 문자 중 하나와 일치하지 않습니다.
[Example-Terminal:Documents user]$ grep "h[^aei]t" test.txt
hot
2. 리눅스 정규 표현식: 특수 문자
. (백슬래시와 점) : 점(.) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\.t" test.txt
h.t
\ (백슬래시 2개) : 백슬래시() 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\\t" test.txt
h\t
^ (백슬래시와 캐럿) : 캐럿(^) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\^t" test.txt
h^t
$ (백슬래시와 달러) : 달러 기호($) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\$t" test.txt
h$t
* (백슬래시와 별표)** : 별표(*) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\*t" test.txt
h*t
+ (백슬래시와 플러스) : 플러스(+) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\+t" test.txt
h+t
[ (백슬래시와 대괄호) : 대괄호([ ]) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\[t" test.txt
h[t
{ (백슬래시와 중괄호) : 중괄호({ }) 자체를 나타냅니다.
[Example-Terminal:Documents user]$ grep "h\{t" test.txt
h{t
3. 리눅스 정규 표현식: 수량자, 그룹화 및 선택
{n} (중괄호와 숫자) : 앞의 문자나 그룹이 n번 나타납니다.
[Example-Terminal:Documents user]$ grep "ho\{2\}t" test.txt
hoot
{n,m} (중괄호, 숫자, 쉼표) : 앞의 문자나 그룹이 n번 이상, m번 이하로 나타납니다.
[Example-Terminal:Documents user]$ grep "ho\{1,2\}t" test.txt
hot
hoot
( ) (소괄호) : 문자나 표현식을 그룹화합니다.
[Example-Terminal:Documents user]$ grep "h(o)+t" test.txt
hot
hoot
| (파이프) : 선택적인 패턴을 나타냅니다.
[Example-Terminal:Documents user]$ grep "h(o|a)t" test.txt
hot
hat
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] 쉘 스크립트(Shell script) 2편 - 함수와 파라미터, 사용자 입력과 출력 (0) | 2023.08.31 |
---|---|
[Linux] 쉘 스크립트(Shell script) 1편 - 기본, 변수와 환경변수, 조건문과 반복문 (0) | 2023.08.31 |
[Linux] Bash 쉘 명령어 - 리디렉션(Redirection) (2) | 2023.08.30 |
[Linux] 리눅스 패키지 관리 시스템(apt, yum, pacman 등) (0) | 2023.08.30 |
[Linux] 리눅스 기본 조작 명령어 (0) | 2023.08.30 |