grep与search模式中间的上界

我正在寻找出现foo和其中一个数字5,6或7的行,但是我只想要他们(foo和所提到的数字之一)之间不超过20个字符的行。 到目前为止,我所提出的最接近的东西是无济于事的:

grep -rniE "foo(.*){0,20}[567]" . 

我有一些基本的错误,我敢肯定,但我现在看不到它。

问题在这里:

 (.*) 

*是贪婪的。 你想匹配零到二十个任何字符的实例。 说:

 grep -rniE 'foo(.){0,20}[567]' .