Grep:在二进制模式下重复字符?

考虑下面的例子,其中grep用于在二进制模式下进行search:

 $ echo "test blabla test ertytey" | grep -ao tes tes tes 

我可以在search模式中添加一个“点”,以匹配任何字符,并显示匹配后的下一个字符:

 $ echo "test blabla test ertytey" | grep -ao tes. test test 

…或更多点,以匹配后续字符:

 $ echo "test blabla test ertytey" | grep -ao tes... test b test e 

比方说,现在我想匹配一些字符( 比如30 ,否:3); 我从man grep读取man grep : {n}前面的项目正好匹配n次。 。 所以我尝试:

 $ echo "test blabla test ertytey" | grep -ao tes.{3} $ 

… 什么都没发生;

 $ echo "test blabla test ertytey" | grep -ao tes.\{3\} $ 

… 什么都没发生;

 $ echo "test blabla test ertytey" | grep -ao tes[.]\{3\} $ 

… 什么都没发生;

 $ echo "test blabla test ertytey" | grep -ao tes\[.\]\{3\} $ 

… 什么都没发生。

任何想法什么是正确的语法是匹配“任何字符”(点)在grep的二进制模式给定的次数?

非常感谢任何答案,
干杯!

编辑:作为@aix的答案指出,最初我犯了一个错误,指定30个字符search,而在这个例子中的string不够长:)现在已经把它改为更合理的计数3 🙂

首先, {30} 恰好匹配三十个字符,而你的字符串不够长。

其次,你的grep可能需要-E标志来启用扩展语法(我的)。

以下为我工作:

 $ echo "test blabla test ertytey" | grep -aoE 'tes.{20}' test blabla test ertyte 

echo "test blabla test ertytey" | grep -aoE 'tes.{3}l'