Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex +不与grep合作_Regex_Grep - Fatal编程技术网

Regex +不与grep合作

Regex +不与grep合作,regex,grep,Regex,Grep,我试图用grep从文件中选择一个特定的核苷酸序列。顺序应为AC,后跟1个或多个As 如果我尝试以下命令: grep 'ACA*' nucleotides.txt 这是可行的,但这不是我真正想要的。我真的需要在C之后至少有一个A,所以应该是正确的正则表达式 grep 'ACA+' nucleotides.txt 但它与任何内容都不匹配,即使文件中明确包含这些模式 grep'ACA+'nucleotides.txt有什么问题?您需要避开它: grep 'ACA\+' nucleotides.

我试图用grep从文件中选择一个特定的核苷酸序列。顺序应为AC,后跟1个或多个As

如果我尝试以下命令:

grep 'ACA*' nucleotides.txt 
这是可行的,但这不是我真正想要的。我真的需要在C之后至少有一个A,所以应该是正确的正则表达式

grep 'ACA+' nucleotides.txt 
但它与任何内容都不匹配,即使文件中明确包含这些模式

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

您需要避开它:

grep 'ACA\+' nucleotides.txt
你需要逃避它:

grep 'ACA\+' nucleotides.txt

grep区分基本正则表达式和扩展正则表达式。在基本正则表达式中,其中的一些字符+存在有其字面意义。如本杰明W.所述,逃避它们以获得其特殊意义的可能性是GNU grep的延伸

替代

grep 'ACA\+'
是根据GNU grep手册页或grep-E使用不推荐的egrep,这样您就可以使用扩展正则表达式,其中+的含义与您预期的相同:

grep -E 'ACA+'
您可以在grep手册页中找到所有这些内容,包括适用于这些内容的字符列表


那么,哪种方法更好呢?如上所述,基本正则表达式中对\+的支持可能不适用于某些grep实现。如果您的目标是在POSIX兼容的系统上实现可移植性,则最好使用grep-E。

grep区分基本正则表达式和扩展正则表达式。在基本正则表达式中,其中的一些字符+存在有其字面意义。如本杰明W.所述,逃避它们以获得其特殊意义的可能性是GNU grep的延伸

替代

grep 'ACA\+'
是根据GNU grep手册页或grep-E使用不推荐的egrep,这样您就可以使用扩展正则表达式,其中+的含义与您预期的相同:

grep -E 'ACA+'
您可以在grep手册页中找到所有这些内容,包括适用于这些内容的字符列表


那么,哪种方法更好呢?如上所述,基本正则表达式中对\+的支持可能不适用于某些grep实现。如果您的目标是在POSIX兼容系统上实现可移植性,那么最好使用grep-E。

哦,谢谢!我怎么知道哪些字符需要转义呢?我还注意到,如果我使用-E选项进行扩展,我不需要转义+…@nbro-google Basic、extended和Perl兼容的正则表达式BREs、EREs和PCREs,并了解哪些工具支持哪些选项提示:sed=BREs默认情况下可以扩展到EREs;awk=ERE或字符串;默认情况下,grep=BREs可以扩展到ERE或字符串,某些版本可以扩展到PCREs。哦,谢谢!我怎么知道哪些字符需要转义呢?我还注意到,如果我使用-E选项进行扩展,我不需要转义+…@nbro-google Basic、extended和Perl兼容的正则表达式BREs、EREs和PCREs,并了解哪些工具支持哪些选项提示:sed=BREs默认情况下可以扩展到EREs;awk=ERE或字符串;grep=BRE默认情况下,可以扩展到ERE或字符串,某些版本可以扩展到PCREs。逆复制-still,您应该读它。逆复制-still,您应该读它。为什么不推荐使用egrep?GNU grep支持将\+作为BRE中的扩展;没有+作为元字符。@BenjaminW:谢谢你的提示-我不知道。所以,对于GNU grep来说,grep和grep-E之间的区别只是你必须逃避什么,而不是什么。GNU sed和-r标志也一样。@nbro egrep和fgrep不推荐使用,因为您不需要支持3个单独的命令来完成同一件事情的风格稍有不同的操作,即g/re/p,您只需要一个命令grep,带有两个选项。为什么不推荐使用egrep?GNU grep支持将\+作为BRE的扩展;没有+作为元字符。@BenjaminW:谢谢你的提示-我不知道。所以,对于GNU grep来说,grep和grep-E之间的区别只是你必须逃避什么,而不是什么。GNU sed和-r标志也一样。@nbro egrep和fgrep不推荐使用,因为您不需要支持3个单独的命令来完成同一件事情的风格稍有不同的操作,即g/re/p,您只需要一个命令grep和几个选项。