Bash의 정규식 일치

Fumbani Banda 2023년1월30일
  1. Bash의 재매칭 연산자
  2. Bash에서 숫자 일치
  3. Bash에서 문자열의 시작 부분과 일치하는 정규식
  4. Bash에서 문자열의 끝과 정규식 일치
  5. Bash의 정규식 일치 이메일
Bash의 정규식 일치

이 튜토리얼은 bash에서 re-match 연산자를 사용하는 정규식 일치를 보여줍니다.

Bash의 재매칭 연산자

=~ 연산자는 재매칭 연산자로 알려져 있습니다. 다음 구문을 사용합니다.

[[ string =~ regex ]]

다시 일치 연산자는 왼쪽에서 오른쪽으로 문자열의 정규식 일치를 수행합니다. 왼쪽이 오른쪽과 일치하면 연산자는 0을 반환하고 그렇지 않으면 1을 반환합니다.

Bash에서 숫자 일치

아래 스크립트는 $greet 변수에 오른쪽에 언급된 문자가 있는지 확인합니다. 이 경우에는 숫자입니다. 완전히 일치하는 경우 재일치 연산자는 0을 반환하고 스크립트는 올바른 출력을 인쇄합니다.

greet="Hello,World!"

if [[ $greet =~ [0-9] ]]; then
    printf "$greet is a number\n"
else
    printf "$greet is not a number\n"
fi

$greet 변수의 값에는 숫자 이외의 문자만 있으므로 재매칭 연산자는 1을 반환하고 아래 출력을 인쇄합니다.

Hello,World! is not a number

여기에서 num이라는 숫자만 있는 스크립트에 새 변수를 만듭니다. 그런 다음 num 변수에 숫자만 있는지 확인하고 재매칭 연산자가 반환한 값에 따라 각각의 출력을 인쇄합니다.

#!/bin/env bash

num="2021"


if [[ $num =~ [0-9] ]]; then
    printf "$num is a number\n"
else
    printf "$num is not a number\n"
fi

변수 num에는 숫자만 있으므로 재검색 연산자는 0을 반환하고 스크립트는 아래 명령문을 인쇄합니다.

2021 is a number

Bash에서 문자열의 시작 부분과 일치하는 정규식

아래 스크립트는 $greet 변수의 값이 숫자로 시작하는지 확인합니다. ^는 문자열 시작 부분의 문자와 일치하도록 지정하는 데 사용됩니다. 연산자가 반환한 값에 따라 해당 출력을 인쇄합니다.

#!/bin/env bash

greet="123Hello,World!"


if [[ $greet =~ ^[0-9] ]]; then
    printf "$greet starts with a digit(s).\n"
else
    printf "$greet does not start with a digit(s)\n"
fi

$greet 변수의 값은 숫자로 시작하므로 연산자는 0을 반환하고 아래 출력을 인쇄합니다.

123Hello,World! starts with a digit(s).

아래와 같이 $greet를 새로운 값으로 설정하고 스크립트를 실행해 보겠습니다.

#!/bin/env bash

greet="Hello,World!123"

if [[ $greet =~ ^[0-9] ]]; then
    printf "$greet starts with a digit(s).\n"
else
    printf "$greet does not start with a digit(s)\n"
fi

변수 $greet의 문자열이 숫자로 시작하지 않기 때문에 bash 연산자는 1을 반환합니다. 스크립트는 아래 표시된 출력을 인쇄합니다.

Hello,World!123 does not start with a digit(s)

Bash에서 문자열의 끝과 정규식 일치

아래 스크립트는 $greet 변수의 값이 숫자로 끝나는지 확인합니다. $는 문자열 끝에 있는 문자와 일치하도록 지정하는 데 사용됩니다.

출력될 출력은 재매칭 연산자가 반환한 값에 따라 달라집니다.

#!/bin/env bash

greet="Hello,World!123"


if [[ $greet =~ [0-9]$ ]]; then
    printf "$greet ends with a digit(s).\n"
else
    printf "$greet does not end with a digit(s)\n"
fi

$greet 변수의 문자열 값은 숫자로 끝납니다. 재일치 연산자는 0을 반환하고 스크립트는 아래 출력을 인쇄합니다.

Hello,World!123 ends with a digit(s).

아래 스크립트와 같이 $greet 변수의 값을 변경해 보겠습니다.

#!/bin/env bash

greet="123Hello,World!"

if [[ $greet =~ [0-9]$ ]]; then
    printf "$greet ends with a digit(s).\n"
else
    printf "$greet does not end with a digit(s)\n"
fi

$greet 변수의 문자열이 숫자로 끝나지 않기 때문에 재검색 연산자는 1을 반환하고 스크립트는 아래 출력을 인쇄합니다.

123Hello,World! does not end with a digit(s)

Bash의 정규식 일치 이메일

이메일을 일치시키려면 이 ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ 정규식 패턴이 일반적으로 사용됩니다.

#!/bin/env bash

email="example@delftstack.com"


if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
    printf "$email is a valid email.\n"
else
    printf "$email is not a valid email.\n"
fi

아래 출력은 확인되고 확인을 통과한 이메일을 보여줍니다.

example@delftstack.com is a valid email.

아래와 같이 이메일 끝에 있는 .com을 제거하고 스크립트를 실행해 보겠습니다.

#!/bin/env bash

email="example@delftstack"


if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
    printf "$email is a valid email.\n"
else
    printf "$email is not a valid email.\n"
fi

이메일은 마지막 부분인 .com이 없기 때문에 테스트에 실패합니다.

example@delftstack is not a valid email.
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

관련 문장 - Bash Regex