변수가 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에서 grep
ERE는 기본 기능 이상의 기능을 제공하지 않지만 일부 문자에는 더하기 기호와 같은 특별한 의미가 있습니다. 출처: 매뉴얼 페이지.
\d
ERE에서는 특별한 의미가 없습니다. 단지 역할일 뿐입니다 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 정의를 읽지 않았습니다.