Shell
Shellscript 匹配正則表達式
我正在嘗試檢查變數是否與 POSIX shell 中的正則表達式匹配。然而,這似乎比我想像的要困難。我正在嘗試檢查變數是否是有效的大小字元串(例如 10M 或 6G 等)
if echo $var | grep -Eq '^\d+[MG]$'; then echo "match" else echo "no match" fi
這就是我嘗試過的,但由於某種原因,即使變數包含正確的字元串,我也從未得到匹配?知道為什麼嗎?
GNU
grep
支持三種類型的正則表達式:基本、擴展 (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
.POSIX
grep
似乎不支持 PCREs。不過,我還沒有閱讀過 POSIX ERE 的定義。