考虑以下示例,其中grep
用于以二进制模式进行搜索:
$ echo "test blabla test ertytey" | grep -ao tes
tes
tes
我可以在搜索模式中添加“点”,以“匹配任何字符”并在匹配后显示下一个字符:
$ echo "test blabla test ertytey" | grep -ao tes.
test
test
...或更多点,以匹配后续字符:
$ echo "test blabla test ertytey" | grep -ao tes...
test b
test e
现在假设我想在比赛结束后匹配多个角色(比如30 ,no:3);我从man grep
开始阅读:{n} The preceding item is matched exactly n times.。所以我试试:
$ 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个字符进行搜索,而示例中的字符串不够长:)现在已将其更改为更合理的3个数: )
答案 0 :(得分:4)
首先,{30}
匹配完全 30个字符,而且你的字符串不够长。
其次,你的grep可能需要-E
标志来启用扩展语法(我的)。
以下适用于我:
$ echo "test blabla test ertytey" | grep -aoE 'tes.{20}'
test blabla test ertyte
答案 1 :(得分:1)
echo "test blabla test ertytey" | grep -aoE 'tes.{3}l'