Bash의 패턴 매칭

Olorunfemi Akinlua 2023년6월20일
  1. 패턴 일치에 =~ 연산자 사용
  2. 패턴 일치에 * 연산자 사용
  3. 패턴 일치에 하위 패턴 사용
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?:// 패턴과 비교합니다. ^ 문자는 패턴이 문자열의 시작 부분에서 일치해야 함을 나타내고 ? 문자는 선행 문자(이 경우 httpss)가 선택 사항임을 나타냅니다.

이는 패턴이 문자열의 시작 부분에서 "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, 23을 사용하여 액세스할 수 있습니다.

결론적으로 패턴 일치는 문자열을 패턴과 비교하여 일치 항목을 찾거나 비교 결과에 따라 작업을 수행할 수 있는 Bash의 강력한 기능입니다. 이것은 문자열과 패턴을 피연산자로 취하고 문자열이 패턴과 일치하면 true를 반환하는 =~ 연산자를 사용하여 수행할 수 있습니다.

패턴 일치에 사용되는 일반적인 연산자 및 기술에는 앞의 문자를 0번 이상 일치시키는 *(별표) 연산자와 문자를 그룹화하거나 입력 문자열에서 일치하는 하위 문자열을 추출할 수 있는 하위 패턴이 포함됩니다.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

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