bash에서 다음 문자열을 정규식과 일치시키려면 어떻게 해야 합니까?

bash에서 다음 문자열을 정규식과 일치시키려면 어떻게 해야 합니까?

문자열 아래에서 조건부 연산자를 비교해야 합니다. 따라서 특정 작업은 81.1.4_r4345가 특정 작업을 수행하거나 "완료"와 일치하는 경우에만 수행됩니다.

  vasanth-releases_81.1.4_r4345.tar.gz

     vasanth-releases-done.tar.gz
  

If [[ $var == ‘vasanth-releases_{0-9}_{0-9}.tar.gz ]] ; then 
    echo ‘True’
Elsif [[ $var  == ‘Vasanth-releases-{a-z}.tar.gz ]]; then 
    echo ‘False’
else 
    echo ‘default’
fi

위의 시도는 예상대로 작동하지 않았습니다. 따라서 이 두 파일에는 정규식 형식이 필요합니다. 이 문제를 해결하는 데 도움을 줄 수 있나요?

감사해요

답변1

귀하의 최종 목표가 무엇인지는 잘 모르겠지만 귀하의 코드에서 몇 가지 문제를 지적할 수 있습니다.

  1. 쉘 명령이나 내장 명령에는 대문자를 사용하면 안 됩니다 If.if
  2. elsif유효하지 않습니다.elif
  3. 코드 편집에 적합하지 않은 워드 프로세서에서 복사하여 "둥근 따옴표"를 사용한 것일 수 있습니다.
  4. 둥근 따옴표를 일반 따옴표로 변경하더라도 첫 번째 조건에서 작은 따옴표를 열고 두 번째 조건까지 다시 닫지 않습니다.
  5. =~Bash에서는 정규식 비교를 위해 연산자가 아닌 연산자를 사용해야 합니다 ==.
  6. 중괄호는 정규식에서 원하는 것을 달성하지 못하므로 해당 범위 내의 모든 문자를 사용 [0-9]하고 일치시켜야 합니다.[a-z]
  7. 정규식에서 괄호를 수정하더라도 여전히 파일과 일치하지 않습니다. regex101.com을 사용하여 올바른 정규식을 만들 수 있지만 bash는 정규식을 확장합니다. 이는 regex101에서 사용할 수 있는 옵션이 아니며 pcre는 가깝지만 교차 호환되지 않는 몇 가지 사항을 찾을 수 있습니다.

답변2

이와 같은 것을 찾고 계십니까?

#!/bin/bash

var="vasanth-releases_81.1.4_r4345.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
    echo ‘True’
elif [[ $var  =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
    echo ‘False’
else
    echo ‘default’
fi

var="vasanth-releases-done.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
    echo ‘True’
elif [[ $var =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
    echo ‘False’
else
    echo ‘default’
fi

관련 정보