2011-04-11 63 views
3

例如,我匹配奇数个“a”。 所以“helloaaa”应该匹配,而“helloaaaa”不应该匹配。如何仅在匹配行末使用grep匹配奇数个字符

我也在bash上试过“(aa)* a $”,有和没有-E选项。

+0

那么你的问题是什么?你忘了实际上问一个问题... – 2011-04-11 14:10:14

+0

我需要一个正则表达式,它将匹配在行尾具有奇数个a的字符串。 – 2011-04-11 14:12:01

回答

3

您的问题是helloaaaa因为最后三个a S的比赛:

helloaaaa 
     === 

为了避免这种情况,你需要确保前一个字符不是a

grep -E '[^a](aa)*a$' filename 

这里我假设这条线不完全是a s。如果整行可以是a s,那么你可以使用这个正则表达式代替:

grep -E '(^|[^a])(aa)*a$' filename 
+0

不适用于我。这与你一起工作吗? – 2011-04-11 14:14:01

+0

是的,它适用于我测试的所有示例。你能提供一个它不起作用的例子,你看到这个例子和你期望看到什么? – 2011-04-11 14:19:26

+0

我确实尝试过这种表达方式。问题是我使用双引号而不是单引号。感谢您及时的回复。 – 2011-04-11 14:30:20