我有一个以下格式的文件(数千行& 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
/正则表达式的任何想法吗?
答案 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