Bash의 패턴 매칭
패턴 일치는 문자열을 패턴과 비교하여 일치하는 항목을 찾거나 비교 결과에 따라 작업을 수행할 수 있는 Bash의 강력한 기능입니다. 이것은 문자열의 형식을 확인하거나 더 큰 문자열에서 하위 문자열을 추출하는 것과 같은 상황에서 유용할 수 있습니다.
이 기사에서는 Bash에서 패턴 일치를 수행하는 방법에 대해 설명하고 패턴 일치에 사용되는 몇 가지 일반적인 연산자와 기술을 다룹니다.
패턴 일치에 =~
연산자 사용
Bash에서 패턴 일치가 작동하는 방식을 이해하기 위해 먼저 패턴 일치를 수행하는 데 사용되는 =~
연산자를 살펴보겠습니다. 이 연산자는 일치시킬 문자열과 비교할 패턴이라는 두 개의 피연산자를 사용합니다.
예를 들어 URL이 포함된 my_string
이라는 문자열이 있고 "http"
또는 "https"
로 시작하는지 확인하려고 한다고 가정해 보겠습니다. =~
연산자를 사용하여 이 비교를 수행할 수 있습니다.
my_string="https://www.example.com"
if [[ $my_string =~ ^https?:// ]]; then
echo "The string starts with a valid URL"
fi
출력:
The string starts with a valid URL
위의 코드에서 =~
연산자를 사용하여 my_string
변수를 ^https?://
패턴과 비교합니다. ^
문자는 패턴이 문자열의 시작 부분에서 일치해야 함을 나타내고 ?
문자는 선행 문자(이 경우 https
의 s
)가 선택 사항임을 나타냅니다.
이는 패턴이 문자열의 시작 부분에서 "http://"
또는 "https://"
와 일치함을 의미합니다.
비교에 성공하면 if
문이 실행되고 "문자열이 유효한 URL로 시작합니다"
메시지가 인쇄됩니다.
패턴 일치에 *
연산자 사용
패턴 일치의 또 다른 일반적인 연산자는 *
(별표) 문자로, 선행 문자가 0번 이상 일치될 수 있음을 나타냅니다. 예를 들어 숫자가 포함된 문자열이 있고 소수점 이하 두 자리까지 유효한 소수인지 확인하려고 한다고 가정해 보겠습니다.
*
연산자를 사용하여 이 비교를 수행할 수 있습니다.
my_string="3.14"
if [[ $my_string =~ ^[0-9]+.[0-9]{0,2}$ ]]; then
echo "The string is a valid decimal number"
else
echo "The string is not a valid decimal number"
fi
출력:
The string is a valid decimal number
위의 코드에서 =~
연산자를 사용하여 my_string
변수를 ^[0-9]+\.[0-9]{0,2}$
패턴과 비교합니다. ^
문자는 패턴이 문자열의 시작 부분에서 일치해야 함을 나타내고 $
문자는 패턴이 문자열 끝에서 일치해야 함을 나타냅니다.
[0-9]
문자 클래스는 0-9의 모든 숫자와 일치하고 +
문자는 선행 문자 클래스가 한 번 이상 일치해야 함을 나타냅니다.
\
(백슬래시) 문자를 사용하여 .
의 특별한 의미를 이스케이프 처리합니다. (점) 문자는 단일 문자와 일치시키는 데 사용됩니다. {0,2}
수량자는 선행 문자(이 경우 [0-9]
문자 클래스)가 0~2회 일치해야 함을 나타냅니다.
즉, 패턴은 "3.14"
또는 "42.00"
과 같이 소수점 이하 두 자리까지만 숫자와 일치합니다.
비교에 성공하면 if
문이 실행되고 "문자열은 유효한 십진수입니다"
메시지가 인쇄됩니다.
패턴 일치에 하위 패턴
사용
패턴 일치에 사용되는 또 다른 일반적인 기술은 하위 패턴을 사용하는 것입니다. 하위 패턴은 괄호로 묶인 패턴의 일부이며 문자를 그룹화하거나 입력 문자열에서 일치하는 하위 문자열을 참조하는 데 사용할 수 있습니다.
예를 들어 "YYYY-MM-DD"
형식의 날짜를 포함하는 문자열이 있고 문자열에서 연도, 월, 일을 추출하려고 한다고 가정해 보겠습니다. 이 추출을 수행하기 위해 하위 패턴을 사용할 수 있습니다.
my_string="2022-11-20"
if [[ $my_string =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ ]]; then
year=${BASH_REMATCH[1]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[3]}
echo "The year is: $year"
echo "The month is: $month"
echo "The day is: $day"
fi
출력:
The year is: 2022
The month is: 11
The day is: 20
위의 코드에서 =~
연산자를 사용하여 my_string
변수를 ^([0-9]{4})-([0-9]{2})-([0-9]{2})$
패턴. ^
및 $
문자는 패턴이 전체 문자열과 일치해야 함을 나타내고 ([0-9]{4})
, ([0-9]{2})
및 ([0-9]{2})
하위 패턴은 각각 날짜의 연도, 월, 일 부분과 일치합니다.
비교에 성공하면 if
문이 실행되고 입력 문자열에서 년, 월, 일이 추출됩니다. 추출된 하위 문자열은 BASH_REMATCH
배열에 저장되며 각각 첫 번째, 두 번째 및 세 번째 하위 패턴에 해당하는 인덱스 1
, 2
및 3
을 사용하여 액세스할 수 있습니다.
결론적으로 패턴 일치는 문자열을 패턴과 비교하여 일치 항목을 찾거나 비교 결과에 따라 작업을 수행할 수 있는 Bash의 강력한 기능입니다. 이것은 문자열과 패턴을 피연산자로 취하고 문자열이 패턴과 일치하면 true
를 반환하는 =~
연산자를 사용하여 수행할 수 있습니다.
패턴 일치에 사용되는 일반적인 연산자 및 기술에는 앞의 문자를 0번 이상 일치시키는 *
(별표) 연산자와 문자를 그룹화하거나 입력 문자열에서 일치하는 하위 문자열을 추출할 수 있는 하위 패턴이 포함됩니다.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn