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.