【问题标题】:syntax error with a regex in unixUnix中正则表达式的语法错误
【发布时间】:2011-10-13 11:28:58
【问题描述】:

我尝试找到一个匹配 1 到 999 之间任意数字的正则表达式。 什么时候使用钩子我得到一个语法错误

(bash: syntax error near unexpected token `(')

当我不使用钩子时,什么都不会发生。

我的正则表达式是:

egrep ^([1-9][0-9]?|)$ Numbers

更新:

但是我怎样才能让他检查我希望他检查的文件,因为我知道如果我使用 echo 可以检查数字但我应该检查文件

【问题讨论】:

  • 你不需要管道|,除非你有条件。

标签: regex linux unix ubuntu grep


【解决方案1】:

这应该匹配 1 到 999 之间的任何数字。我添加了 {0,2},这意味着匹配 [0-9] 字符组的 0 到 2 次重复。

 ^[1-9][0-9]{0,2}$

如果您尝试匹配括号和竖线字符,则需要转义它们:

 ^\([1-9][0-9]{0,2}\|\)$

【讨论】:

    【解决方案2】:

    用双引号将正则表达式括起来或用反斜杠转义括号和管道。

    例如egrep "^([1-9][0-9]?|)$"egrep ^\([1-9][0-9]?\|\)$

    顺便说一句,您的正则表达式似乎已损坏。 egrep "^[1-9][0-9]?[0-9]?$"呢?

    【讨论】:

      【解决方案3】:

      试试这个:

      echo $number | grep '^[1-9][0-9]\{0,2\}$'
      

      【讨论】:

      • 但是我怎样才能让他检查我想让他检查的文件,因为我知道我可以检查我回显的数字但我应该检查文件
      • @Bjorn: grep '^[1-9][0-9]\{0,2\}$' filename 应该可以解决问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2012-11-10
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多