正規表現に一致するシェルスクリプト

正規表現に一致するシェルスクリプト

変数がPOSIXシェルの正規表現と一致することを確認しようとしています。ところがこれが思ったより難しいと思います。変数が有効なサイズ文字列(10Mや6Gなど)であることを確認しようとしています。

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

これは私が試したことですが、変数に正しい文字列が含まれていても、何らかの理由で一致しませんか?理由をご存知ですか?

答え1

GNUは、grep基本、拡張(ERE)、およびPerl(PCRE)の3種類の正規表現をサポートしています。 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定義を読んでいません。

関連情報