【问题标题】:grep + fit grep syntax for solarisgrep + fit 用于 solaris 的 grep 语法
【发布时间】:2012-02-16 10:12:57
【问题描述】:

以下 grep 命令的目标是匹配带有“.”的数字(参见可以匹配的 PARAM 和不应该匹配的 PARAM 的示例)

问题是这种语法在 Linux 上可以正常工作,但在 Solaris 上不行

请建议如何使这种语法适合 Solaris(或者如果有人对可以在两种操作系统上运行的其他语法有其他意见)

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

匹配参数示例

 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

【问题讨论】:

  • 大多数 Solaris 机器 都将 GNU grep 安装为 ggrep。你可以试试(通常在 /opt/csw/bin 或附近)。如果可行,我将作为答案发布
  • 在我的 solaris 机器上找不到 grep(我只有 grep)
  • 改用egrep,但请注意其语法不同;在您的情况下,应删除除点之前的所有反斜杠。
  • 是的,现在它的工作非常好,谢谢

标签: linux shell grep solaris


【解决方案1】:

哇,这是一个有趣的任务!花了一些时间试图弄清楚为什么我的正则表达式只在 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]+$'

【讨论】:

    【解决方案2】:

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

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

    换句话说,任何带有点或数字以外的字符,或者带有两个或多个相邻点的内容都是无效的。 编辑:也为无效大小写添加了前导或尾随点。允许多个点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2018-08-29
      相关资源
      最近更新 更多