一个正则表达式用于匹配一个字符或另一个字符?

13

我正在寻找一个正则表达式代码,可以列出所有包含a或i的行。我尝试了以下代码:

grep -E '[(a|i)]{1}' testFile.txt

但是这给我返回了包含字母 a 或 i 的单词以及包含"en"和"i"的单词。这有什么问题吗?


如果您尝试使用".(a|i)."会发生什么? - Darka
4
记录一下,“a或i(或两个都有)”的正则表达式是简单的[ai]-- grep会在一行中任何地方报告匹配,因此您不需要前导或尾随通配符。 - tripleee
如果该行上没有其他内容,则可以使用 grep '^[ai]$' filegrep -Fx -e a -e i file - tripleee
该文件包含希腊字母。正则表达式应该显示例如:beta,但它可能不会显示例如iota,因为这个单词包含了一个i和一个a。 - user2810895
2个回答

9
你可以通过以下方法实现这一点:
grep -E "^[^ai]*(a|i){1}[^ai]*$" testFile.txt

问题在于这会给我一个相当大的黑色空间。 - user2810895
你能提供一个它不能正常工作的样本吗?我已经在这个文件上进行了测试,效果很好。 - Alma Do
我的示例将通过beta(单个a),但不会通过alfa(字符串中出现两次a)或iota(同时包含ai)- 我刚刚检查过。 - Alma Do
确实,我用了你的文件后就可以了,谢谢!我认为文件本身存在问题。 - user2810895
"{1}" 是完全多余的。"(a|i)" 可以用字符类"[ai]"来表示,这样你就不需要"-E"选项了。 - tripleee
显示剩余2条评论

0
如果你想要一个独占或(exclusive OR),那么可以尝试这个命令: grep -E '^[^i]*a[^i]*$|^[^a]*i[^a]*$'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接