grep:将阴性匹配与After相结合(搜索不包含单词片段的蛋白质序列)

grep:将阴性匹配与After相结合(搜索不包含单词片段的蛋白质序列),grep,fasta,Grep,Fasta,我有一个fasta序列,我想过滤掉所有在标题中有单词片段的序列 我想我可以使用grep和-a1(因为蛋白质序列总是在一行上)和-I(以防片段没有大写)并将其与-v一起使用,但不知何故,反转结果并不能如预期的那样起作用 >tr|A0A534K2W8|A0A534K2W8_9EURY Epoxide hydrolase 1 (Fragment) OS=Euryarchaeota archaeon OX=2026739 GN=E6K10_05355 PE=4 SV=1 MSNTPDFNRR..

我有一个fasta序列,我想过滤掉所有在标题中有单词片段的序列

我想我可以使用
grep
-a1
(因为蛋白质序列总是在一行上)和
-I
(以防片段没有大写)并将其与
-v
一起使用,但不知何故,反转结果并不能如预期的那样起作用

>tr|A0A534K2W8|A0A534K2W8_9EURY Epoxide hydrolase 1 (Fragment) OS=Euryarchaeota archaeon OX=2026739 GN=E6K10_05355 PE=4 SV=1 
MSNTPDFNRR...
>tr|A0A4S3JUN3|A0A4S3JUN3_9EURO AB hydrolase-1 domain-containing protein OS=Aspergillus tanneri OX=1220188 GN=ATNIH1004_010243 PE=4 SV=1
MRDKYTPATL...
>tr|B1AQP8|B1AQP8_HUMAN Epoxide hydrolase 1 (Fragment) OS=Homo sapiens OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV...
>tr|B1AQP9|B1AQP9_HUMAN Epoxide hydrolase 1 (Fragment) OS=Homo sapiens OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV...
>tr|Q6FGZ3|Q6FGZ3_HUMAN EPHX1 protein (Fragment) OS=Homo sapiens OX=9606 GN=EPHX1 PE=2 SV=1
MWLEILLTSV...
>tr|A0A2G8L4U1|A0A2G8L4U1_STIJA Putative epoxide hydrolase 1-like OS=Stichopus japonicus OX=307972 GN=BSL78_07808 PE=4 SV=1
MVHGWPGSFY...
如果我想保留带有片段的序列,它可以正常工作

grep-i“片段”-a1 test.fasta
>tr | A0A534K2W8 | A0A534K2W8 	 Eury环氧化物水解酶1(片段)OS=Euryarchaeota Archeon OX=2026739 GN=E6K10_05355 PE=4 SV=1
MSNTPDFNRR。。。
--
>tr | B1AQP8 | B1AQP8 |人类环氧化物水解酶1(片段)OS=智人OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV。。。
>tr | B1AQP9 | B1AQP9 |人环氧化物水解酶1(片段)OS=智人OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV。。。
>tr | Q6FGZ3 | Q6FGZ3 |人类EPHX1蛋白(片段)OS=智人OX=9606 GN=EPHX1 PE=2 SV=1
MWLEILLTSV。。。
但如果我想逆转比赛,这就是结果

grep-i“片段”-1-v测试
MSNTPDFNRR。。。
>tr | A0A4S3JUN3 | A0A4S3JUN3 | 9EURO AB水解酶-1结构域含蛋白质OS=单宁曲霉OX=1220188 GN=ATNIH1004|010243 PE=4 SV=1
MRDKYTPATL。。。
>tr | B1AQP8 | B1AQP8 |人类环氧化物水解酶1(片段)OS=智人OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV。。。
>tr | B1AQP9 | B1AQP9 |人环氧化物水解酶1(片段)OS=智人OX=9606 GN=EPHX1 PE=1 SV=1
MWLEILLTSV。。。
>tr | Q6FGZ3 | Q6FGZ3 |人类EPHX1蛋白(片段)OS=智人OX=9606 GN=EPHX1 PE=2 SV=1
MWLEILLTSV。。。
>tr | A0A2G8L4U1 | A0A2G8L4U1 | STIJA假定的环氧化物水解酶1类OS=刺参OX=307972 GN=BSL78(U 07808 PE=4 SV=1
MVHGWPGSFY。。。

我哪里出了问题?

问题是
-v
不能与上下文切换一起使用。如果您有
GNU grep
PCRE
,则可以使用复杂的正则表达式:

grep——无组分隔符-xiP-a1'>((?!fragment)。+'
注意使用
--no group separator
避免不同匹配之间出现
--
<代码>-P启用
PCRE
<代码>-x确保整行匹配<代码>>((?!fragment)。+确保
片段
不出现在以
开头的行中(有关更多说明,请参阅)


但是,在这种情况下,您最好使用
awk

带有GNU awk的
#
awk-v IGNORECASE=1'/^>/&&/片段/{f=2}f&&f--'
#任何awk
awk'/^>/&&tolower($0)!~/片段/{f=2}f&&f--'
这里,
f=2
大于匹配后所需的行数<代码>/^>/&/fragment/将只匹配以
开头且不包含
fragment

有关更多此类示例,请参见