use*_*470 3 shell scripting regular-expression
我正在尝试检查变量是否与 POSIX shell 中的正则表达式匹配。然而,这似乎比我想象的要困难。我试图检查变量是否是有效的大小字符串(例如 10M 或 6G 等)
if echo $var | grep -Eq '^\d+[MG]$';
then
echo "match"
else
echo "no match"
fi
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的,但由于某种原因,即使变量包含正确的字符串,我也从未得到匹配项?知道为什么吗?
GNUgrep支持三种类型的正则表达式:基本、扩展 (ERE) 和 Perl (PCRE)。在 GNU 中grep,ERE 不提供基本功能之上的功能,但某些字符具有特殊含义,例如加号。来源:手册页。
\d在 ERE 中没有任何特殊含义;这只是角色d。要表达数字,请使用[[:digit:]]或 旧的(我想知道是否存在与 不同的[0-9]字符编码)。[0-9][[:digit:]]
不过,您的表达式可以用作 PCRE:
if echo $var | grep -Pq '^\d+[MG]$';
then
echo "match"
else
echo "no match"
fi
Run Code Online (Sandbox Code Playgroud)
请注意该-P选项而不是-E.
POSIX 似乎grep 不支持 PCRE。不过,我还没有阅读 POSIX ERE 定义。
| 归档时间: |
|
| 查看次数: |
4433 次 |
| 最近记录: |