Grep:二进制模式中的重复字符?

时间:2011-10-29 15:25:46

标签: linux grep

考虑以下示例,其中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的二进制模式下,给定次数匹配“任意字符”(点)的正确语法是什么?

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

编辑:正如@a​​ix'的回答指出的那样,最初我错误地指定了30个字符进行搜索,而示例中的字符串不够长:)现在已将其更改为更合理的3个数: )

2 个答案:

答案 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'