我是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\}
两者都没有返回。
我错过了什么吗?
答案 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