反向引用和间隔支持不适用于MacOS grep

时间:2016-11-06 06:10:06

标签: regex macos grep

我是shell脚本的新手,并且坚持使用反向引用和间隔括号。

我正在登录我的macOSX sierra,who命令的输出是这样的

foo       console  Nov  3 19:06
bar       ttys000  Nov  3 19:06

然后当grep如下,

who | grep -G \(o\).*\1
who | grep -G o\{3\}

两者都没有返回。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

  • 如果您在正则表达式模式周围加上引号以避免预先解释shell,那么第一个将起作用。

    在第一个正则表达式模式.*中,贪婪地尽可能多地匹配,在您的情况下直到最后o

    $ grep -Go '\(o\).*\1' <<<'foo       console  Nov  3 19:06'
    oo       console  No
    
  • 第二种模式grep -G o\{3\}不匹配,因为字符串中没有三个连续的o匹配,也许你想匹配三个0。再次使用模式周围的引号来预防shell解释:

    $ grep -Go '0\{3\}' <<<'bar       ttys000  Nov  3 19:06'
    000