+不使用grep

时间:2016-02-26 23:28:02

标签: regex grep

我正在尝试使用grep从文件中选择某个核苷酸序列。序列应为AC,后跟1个或多个A s。

如果我尝试以下命令:

grep 'ACA*' nucleotides.txt 

它有效,但实际上并不是我想要的。我真的需要在C之后至少有一个A,所以假定正确的正则表达式应该是

grep 'ACA+' nucleotides.txt 

但它与任何内容都不匹配,即使文件中明确包含这些模式。

grep 'ACA+' nucleotides.txt出了什么问题?

2 个答案:

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