考虑下面的例子,其中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'