정규 표현식과 일치하는 쉘스크립트

정규 표현식과 일치하는 쉘스크립트

변수가 POSIX 셸의 정규식과 일치하는지 확인하려고 합니다. 그런데 이게 생각보다 어려운 것 같아요. 변수가 유효한 크기 문자열(예: 10M 또는 6G 등)인지 확인하려고 합니다.

if echo $var | grep -Eq '^\d+[MG]$';
then
    echo "match"
else
    echo "no match"
fi

이것이 내가 시도한 것이지만 변수에 올바른 문자열이 포함되어 있어도 어떤 이유로 일치하지 않습니까? 이유를 아시나요?

답변1

GNU는 grep기본, 확장(ERE) 및 Perl(PCRE)의 세 가지 유형의 정규식을 지원합니다. GNU에서 grepERE는 기본 기능 이상의 기능을 제공하지 않지만 일부 문자에는 더하기 기호와 같은 특별한 의미가 있습니다. 출처: 매뉴얼 페이지.

\dERE에서는 특별한 의미가 없습니다. 단지 역할일 뿐입니다 d. 숫자를 표현하려면 [[:digit:]]or old를 사용하세요. ( 그와 다른 문자 인코딩이 [0-9]있는지 궁금합니다 .)[0-9][[:digit:]]

그러나 표현식을 PCRE로 사용할 수 있습니다.

if echo $var | grep -Pq '^\d+[MG]$';
then
    echo "match"
else
    echo "no match"
fi

-P옵션은 해당되지 않습니다 -E.

POSIX처럼 보입니다.grep PCRE는 지원되지 않습니다. 그러나 아직 POSIX ERE 정의를 읽지 않았습니다.

관련 정보