solaris的grep + fit grep语法

时间:2012-02-16 10:12:57

标签: linux shell grep solaris

以下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

2 个答案:

答案 0 :(得分:0)

您可以使用case语句,尽管其语法不是通用的。

case $PARAM in
  *[!.0-9]* | *..* | .* | *. ) echo invalid ;;
  *) echo valid ;;
esac

换句话说,具有除点或数字以外的字符或具有两个或更多相邻点的任何内容都是无效的。 修改:在无效案例中添加了前导或尾随点。允许多个点。

答案 1 :(得分:0)

哇,这是一项有趣的任务!花了一些时间试图弄清楚为什么我的正则表达式只在Solaris中部分工作。无论如何,诀窍是使用egrep而不是grep。您可以参考他们的手册页来发现以下差异:

grep - search a file for a pattern

,同时:

egrep - search a file  for  a  pattern  using  full  regular expressions

我注意到在我的RH系统上,grepegrep都有类似的功能:

grep, egrep, fgrep - print lines matching a pattern

例如,您可以使用以下解决方案:

echo $PARAM | egrep '^([0-9]+\.)+[0-9]+$'