grep - 匹配单词,之后没有任何内容

时间:2014-07-31 19:09:59

标签: regex grep

我有一个以下格式的文件(数千行& tab分隔):

Gnl3l   3'UTR    
Smap1   5'UTR||3'UTR    
D4Wsu53e    CDS||5'UTR||3'UTR    
Mecp2   3'UTR    
Mecp2   3'UTR

我想从第二个标签返回仅包含"3'UTR"的所有行。期望的输出:

Gnl3l   3'UTR    
Mecp2   3'UTR    
Mecp2   3'UTR

有关grep /正则表达式的任何想法吗?

3 个答案:

答案 0 :(得分:2)

最好在这里使用awk,因为使用awk可以轻松匹配特定字段而无需使用复杂的正则表达式:

awk -v s="3'UTR" '$2==s' file
Gnl3l   3'UTR
Mecp2   3'UTR
Mecp2   3'UTR

但是这里有一个grep命令也可以,但我更喜欢awk:

grep "\t3'UTR" file
Gnl3l   3'UTR
Mecp2   3'UTR
Mecp2   3'UTR

答案 1 :(得分:1)

如果您想在此处使用正则表达式,请使用以下内容:

grep "(.*)\t3'UTR$"

此正则表达式表示开头可以有任何内容((.*)),后跟一个标签(\t - 您还可以使用所有空格\s)和{{1 }}。之后,该行必须结束(3'UTR)。

请注意,不需要$,但如果您想使用远离grep的正则表达式,您将找到需要它的环境。

答案 2 :(得分:0)

使用grep

grep -E "^\S+\s+3'UTR$" file

或者

grep "^[^\t]\+\t\+3'UTR$" file

输出:

Gnl3l   3'UTR
Mecp2   3'UTR
Mecp2   3'UTR