正規表現(GNU grep)の先読みでn個後をマッチ対象にするには？


次のような文字列があるとします

[code]

    Hello!How are you?Good bye!
    
[/code]

例えば、「`ll`」から3つ後の「`o`」、つまりこの場合であれば「`o!How are y`」をマッチ対象とするといったようなことを行いたいです。

`grep -P "(?<=ll).*(?=o)`だともちろん「`o!How are you?Go`」までがマッチ対象になりますし、`grep -P
"(?<=ll).*?(?=o)`とすると、「`o!H`」の部分だけがマッチ対象となってしまいます。数字を指定し、その数だけ後の文字列までをマッチ対象としたいです。

ご存知の方がおられましたらご教授お願いいたします。



[code]

    $ echo 'Hello!How are you?Good bye!' | grep -Po '(?<=ll)([^o]*o){2}[^o]*(?=o)'
    o!How are y
    
[/code]



[code]

    $ echo 'Hello!How are you?Good bye!' | grep -Po '(?<=ll)([^o]*o){2}[^o]*(?=o)'
    o!How are y
    
[/code]

