본문 바로가기
프로그래밍/Linux

[Linux] 리눅스 정규 표현식(Regular Expressions)

by HI_Ai 2023. 8. 31.
반응형

정규 표현식(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
반응형