我正在尝试使用grep
从文件中选择某个核苷酸序列。序列应为AC
,后跟1个或多个A
s。
如果我尝试以下命令:
grep 'ACA*' nucleotides.txt
它有效,但实际上并不是我想要的。我真的需要在C
之后至少有一个A
,所以假定正确的正则表达式应该是
grep 'ACA+' nucleotides.txt
但它与任何内容都不匹配,即使文件中明确包含这些模式。
grep 'ACA+' nucleotides.txt
出了什么问题?
答案 0 :(得分:3)
grep区分基本和扩展正则表达式。在基本的正则表达式中,一些字符(其中+
)具有字面含义。逃避它们以获得其特殊含义的可能性是GNU grep的扩展(如Benjamin W。所述)。
的替代方案
grep 'ACA\+'
是使用egrep
(根据GNU grep手册页弃用)或grep -E
,这样您就可以使用扩展正则表达式,其中+
具有您期望的含义:
grep -E 'ACA+'
您可以在grep手册页中找到所有这些(包括适用的字符列表)。
那么,哪种方法更好?如上所述,在基本正则表达式中对\+
的支持可能不适用于grep的某些实现。如果您的目标是在POSIX兼容系统上实现可移植性,则最好使用grep -E
。
答案 1 :(得分:2)
你需要逃脱它:
grep 'ACA\+' nucleotides.txt