我有一个带有唯一标头的Fasta文件,我想通过在Unix中使用正则表达式来提取此标头的一部分。
例如My Fasta文件以此标题开头:
Amount=GoldWeight*GoldRate; // TOP DOWN APPROACH
GoldWeight=Amount/GoldRate; // BOTTOM UP APPROACH
我想提取这个标题的最后一部分,如:
>jgi|Penbr2|47586|fgenesh1_pm.1_#_25
实际上我在vim编辑器中使用这个正则表达式,但它不起作用:
>fgenesh1_pm.1_#_25
或
:%s/^([^|]+\|){3}//g
如果给我一些建议,我会合适的。
答案 0 :(得分:3)
您可以使用sed
:
sed -e 's/>.*|/>/' fasta-file
即。 >
和|
之间的所有内容都被>
替换。
答案 1 :(得分:3)
我不知道领先的>
是否也是您文字的一部分。假设它们不是。
由于您使用vim
进行了标记,因此我只发布了vim解决方案。
你可以使用正则表达式的“贪婪”:
在vim中:
%s/.*|//
将离开最后一部分,这是最简单的方法。
在vim中,您也可以使用\zs, \ze
和non-greedy
匹配:
%s/\zs.\{-}\ze[^|]\+$//
当然,如果您喜欢分组,可以使用\(...\)
进行分组,不要使用\zs \ze
。
在您的代码中,您只使用(...)
进行分组而不进行转义。我不知道你是如何在你的vimrc中配置你的magic
设置的,如果你使用默认设置,你必须逃避( and )
以赋予它们特殊的含义(在这里分组)。就像我们对BRE的做法一样。做一个:h magic
,找到表格来了解差异。
在vim中:h terms
获取详细信息。