Shell

Shellscript 匹配正則表達式

  • May 10, 2021

我正在嘗試檢查變數是否與 POSIX shell 中的正則表達式匹配。然而,這似乎比我想像的要困難。我正在嘗試檢查變數是否是有效的大小字元串(例如 10M 或 6G 等)

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

這就是我嘗試過的,但由於某種原因,即使變數包含正確的字元串,我也從未得到匹配?知道為什麼嗎?

GNUgrep支持三種類型的正則表達式:基本、擴展 (ERE) 和 Perl (PCRE)。在 GNUgrep中,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.

POSIXgrep 似乎不支持 PCREs。不過,我還沒有閱讀過 POSIX ERE 的定義。

引用自:https://unix.stackexchange.com/questions/648985