regex (정규 표현식)
100%

고급 Text-Fu · 레슨 1

regex (정규 표현식)

앵커, 문자 집합, 반복, 정규 표현식 종류가 텍스트 패턴 일치를 제어하는 방식을 배웁니다.

흔히 regex로 줄여 부르는 정규 표현식은 텍스트 패턴을 설명합니다. grep, sed, awk 같은 도구가 정규 표현식을 사용하지만 지원하는 구문은 다를 수 있으므로 항상 도구와 정규 표현식 종류를 확인해야 합니다.

GNU grep은 기본적으로 기본 정규 표현식(BRE)을 사용하고 -E를 지정하면 확장 정규 표현식(ERE)을 사용합니다. 이 레슨에서는 둘이 공유하는 구성 요소를 소개한 뒤 흔한 ERE 추가 요소를 설명합니다.

예제에는 다음 입력을 사용합니다.

sally sells seashells
by the seashore

문자 그대로의 텍스트 일치시키기

대부분의 일반 문자는 자기 자신과 일치합니다. 패턴 seashells는 그 정확한 문자열이 어디든 들어 있는 줄을 선택합니다.

$ grep 'seashells' sample.txt
sally sells seashells

일치 도구가 받기 전에 쉘이 패턴을 확장하거나 분리하지 않도록 정규 표현식 패턴을 따옴표로 묶으세요. 정규 표현식은 쉘 경로명 확장과도 다릅니다. 정규 표현식에서 *는 앞의 원자를 반복하지만 쉘 글로브에서 *는 경로명 문자 문자열에 대응하는 와일드카드 자체입니다.

ab* 같은 정규 표현식에서 *는 무엇을 하나요?

일치 위치 고정하기

대괄호 표현식 밖에서 패턴 시작의 ^는 줄 시작에 일치 위치를 고정합니다.

^by

$ 앵커는 줄 끝에 일치합니다.

seashore$

전체 줄이 패턴에 맞아야 하면 두 앵커를 함께 사용합니다.

^by the seashore$

전체 텍스트가 by the seashore인 줄에만 일치하는 패턴은 무엇인가요?

문자 하나 일치시키기

일반적인 줄 단위 정규 표현식 모드에서 점은 문자 하나와 일치합니다.

b.

by와 일치하지만 bab7에도 일치할 수 있습니다. 뒤에 문자 하나가 필요하므로 b 하나만 있는 경우에는 일치하지 않습니다. 문자 그대로의 마침표에는 \.로 이스케이프하거나 알맞은 대괄호 표현식 안에 넣습니다.

전체 줄 패턴 ^b.$와 일치하지 않는 문자열은 무엇인가요?

대괄호 표현식 사용하기

대괄호 표현식은 지정한 집합의 문자 하나와 일치합니다.

s[ae]lls

이 위치에서 sells 또는 salls와 일치합니다.

^[ 바로 뒤의 첫 문자이면 집합을 부정합니다.

s[^e]lls

첫 번째 s 다음 문자가 e일 수 없으므로 salls와 일치하지만 sells와는 일치하지 않습니다.

[^e]는 무엇과 일치하나요?

범위는 두 끝점 사이의 문자를 설명할 수 있습니다.

d[a-c]g

dag, dbg, dcg와 일치할 수 있습니다. 범위 동작은 로캘 배열에 따라 달라질 수 있습니다. [[:lower:]], [[:upper:]], [[:digit:]] 같은 문자 클래스가 의도를 더 명확하게 표현하는 경우가 많습니다.

패턴 반복하고 결합하기

BRE와 ERE 모두에서 *는 앞 원자의 0번 이상 반복을 뜻합니다.

seashells*

seashell 뒤에 s가 0개 이상 이어지는 문자열과 일치합니다. grep -E를 사용하는 ERE 모드의 흔한 연산자는 다음과 같습니다.

  • +: 1번 이상 반복
  • ?: 0번 또는 1번 반복
  • |: 왼쪽 표현식 또는 오른쪽 표현식
  • (...): 표현식 그룹화

예를 들면 다음과 같습니다.

$ grep -E '^(cat|dog)s?$' animals.txt

전체 줄이 cat, cats, dog, dogs 중 하나인 경우를 선택합니다. BRE 모드에서는 이 연산자의 이스케이프 규칙이 다르므로 확인 없이 패턴을 종류 사이에 복사하지 마세요.

패턴 ^(cat|dog)s?$에 확장 정규 표현식 구문을 활성화하는 명령어는 무엇인가요?

Linux 텍스트 도구로 정규 표현식 선택을 연습하려면 다음 실습을 진행해 보세요.

  1. Linux에서 grep으로 텍스트 검색 - 기본 검색, 줄 번호, ^$ 앵커, 기본 및 확장 정규 표현식을 연습합니다.
  2. 텍스트 처리와 정규 표현식 - grep, sed, awk와 정규 표현식으로 텍스트를 효율적으로 조작하고 패턴을 일치시킵니다.
  3. 메일과 숫자 추출하기 - grep과 정규 표현식으로 파일에서 이메일 주소와 숫자를 추출합니다.

레슨 완료

regex (정규 표현식) 완료

이제 줄 단위 정규 표현식의 기초를 읽고 만들 수 있습니다.

  • 정규 표현식 연산자와 쉘 경로명 와일드카드를 구분할 수 있습니다.

  • 줄 시작이나 끝에 일치 위치를 고정할 수 있습니다.

  • 점이나 대괄호 표현식으로 문자 하나를 일치시킬 수 있습니다.

  • 집합을 부정하고 로캘을 고려하는 문자 클래스를 사용할 수 있습니다.

  • BRE 또는 ERE 구문을 의도적으로 선택할 수 있습니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
다음 수업
고급 Text-Fu(으)로 돌아가기