正则表达式字符或与egrep的行尾

时间:2013-07-22 11:47:45

标签: grep

我有以下正则表达式:

egrep '(chr1 .*n70$|chr1 .*n70-)' results/files/forbidden_variants

匹配

chr1 n70
chr1 n70-n79
chr1 n70-n79-n83
chr1 n70-n79
chr1 n70-n79-s15-s16
chr1 n70
chr1 n70-n91
chr1 n70

并且速度非常慢,因为我用数百万次替换n70这样的id。

因此我想摆脱OR。我写了:

egrep '(chr1 .*n70[-\$])' results/files/forbidden_variants

但它不起作用,因为我没有使用此命令匹配行尾。输出如下:

chr1 n70-n79
chr1 n70-n79-n83
chr1 n70-n79
chr1 n70-n79-s15-s16
chr1 n70-n91

我在这里做错了什么? :)谢谢。

2 个答案:

答案 0 :(得分:1)

只需在当前正则表达式中添加+:

egrep '(chr1 n70[-\$]+)' results/files/forbidden_variants

答案 1 :(得分:0)

为什么不简单地使用

chr1 n70

你可以使用OR

chr1 n70($|-)

这基本上等同于你的第一个表达式,但是在你的第一个表达式中,我认为你的匹配中不需要。*。