以下grep命令的目标是将数字与“。”匹配。 (参见可匹配的PARAM示例和不匹配的PARAM)
问题是这种语法在Linux上运行良好,但对Solaris不行。
请建议如何为Solaris安装此语法(或者如果有人对其他可以在这两种操作系统上运行的语法有其他意见)
echo $PARAM | grep '^\([0-9]\+\.\)\+[0-9]\+$'
匹配PARAM的例子
PARAM=2.4
PARAM=232.14
PARAM=202.14.34
非匹配PARAM的例子
PARAM=2.
PARAM=.14
PARAM=202
PARAM=2.a
PARAM=e.14
PARAM=202
答案 0 :(得分:0)
您可以使用case
语句,尽管其语法不是通用的。
case $PARAM in
*[!.0-9]* | *..* | .* | *. ) echo invalid ;;
*) echo valid ;;
esac
换句话说,具有除点或数字以外的字符或具有两个或更多相邻点的任何内容都是无效的。 修改:在无效案例中添加了前导或尾随点。允许多个点。
答案 1 :(得分:0)
egrep
而不是grep
。您可以参考他们的手册页来发现以下差异:
grep - search a file for a pattern
,同时:
egrep - search a file for a pattern using full regular expressions
我注意到在我的RH系统上,grep
和egrep
都有类似的功能:
grep, egrep, fgrep - print lines matching a pattern
例如,您可以使用以下解决方案:
echo $PARAM | egrep '^([0-9]+\.)+[0-9]+$'