반응형

이번 포스팅은 바로 전에 올린 몇몇 특수문자들의 특징에 대한 다음편이라고 보면 좋을 것 같다. 특히 grep 명령어는 정규 표현식과 자주 같이 사용되는데 이에 대해 같이 설명하면 좋으나 이 내용은 나중에 따로 "Linux 명령어" 카테고리에 올려놓도록 하겠다.

 

일반적으로 regex 또는 regexp로 정의되기도 하는 정규 표현식(Regular Expression)은 텍스트 데이터에서 패턴 일치 및 조작 매커니즘을 제공하는 언어이다. 이들은 grep, sed, awk와 같은 다양한 Linux 도구와 특정 패턴을 기반으로 텍스트를 검색, 필터링 및 수정하기 위한 많은 프로그래밍 언어에 사용된다.


정규식은 검색 패턴을 형성하는 일련의 문자로 주요 구성 요소 중 일부는 다음과 같다.


구성 요소
  1. 리터럴 문자: 문자, 숫자 및 구두점과 같이 자신과 일치하는 일반 텍스트 문자다.

  2. 메타문자: 정규 표현식에서 특정한 의미를 갖는 특수 문자다.

    .: 개행 문자를 제외한 모든 단일 문자와 일치한다.
    ^: 줄의 시작과 일치한다.
    $: 줄의 끝과 일치한다.
    *: 선행 문자 또는 그룹의 0개 이상의 발생과 일치한다.
    +: 하나 이상의 선행 문자 또는 그룹과 일치한다.
    ?: 선행 문자 또는 그룹의 0개 또는 1개 항목과 일치한다.
    \: 다음 문자의 특별한 의미를 이스케이프하여 리터럴 문자로 만든다.
    [...]: 괄호 안의 문자 중 하나와 일치하는 문자 클래스를 정의한다.
    [^...]: 대괄호 안에 있지 않은 모든 문자와 일치하는 부정 문자 클래스를 정의한다.
    {n}: 선행 문자 또는 그룹의 정확히 n번 항목과 일치한다.
    {n,}: 선행 문자 또는 그룹의 n개 이상의 발생과 일치한다.
    {n,m}: 선행 문자 또는 그룹의 최소 n개 및 최대 m개 발생과 일치한다.
    |: 교대를 나타내며 왼쪽 또는 오른쪽에 있는 표현식의 일치를 허용한다.
    (...): 문자 또는 표현식을 함께 그룹화하여 한정 기호를 전체 그룹에 적용할 수 있다.

  3. POSIX 문자 클래스: 일반적으로 사용되는 문자 그룹에 대해 미리 정의된 문자 클래스다.

    [:alnum:]: 영숫자 문자(문자 및 숫자).
    [:alpha:]: 알파벳 문자(글자).
    [:digit:]: 숫자(숫자).
    [:lower:]: 소문자.
    [:upper:]: 대문자.
    [:punct:]: 구두점 문자.
    [:space:]: 공백, 탭 및 줄 바꿈을 포함한 공백 문자

grep 명령과 함께 정규식 사용 예

특정 단어로 시작하는 줄 찾기

$ grep '^apple' fruits.txt

3글자 단어가 포함된 줄 찾기

$ grep -E '\b[a-zA-Z]{3}\b' fruits.txt

숫자 뒤에 소문자가 있는 행 찾기

$ grep -E '[0-9][a-z]' file.txt

 

반응형