Regex 如何使用Linux命令提取Fasta文件中的部分头

Regex 如何使用Linux命令提取Fasta文件中的部分头,regex,linux,vim,Regex,Linux,Vim,我有一个具有唯一头的Fasta文件,我想在Unix中使用正则表达式提取该头的一部分 例如,我的Fasta文件以以下标题开头: >jgi|Penbr2|47586|fgenesh1_pm.1_#_25 我只想提取标题的最后一部分,如: >fgenesh1_pm.1_#_25 实际上,我在vim editor中使用了这个正则表达式,但它不起作用: :%s/^([^|]+\|){3}//g 或 如果给我一些建议,我会很合适。您可以使用sed: sed -e 's/>.*|/

我有一个具有唯一头的Fasta文件,我想在Unix中使用正则表达式提取该头的一部分

例如,我的Fasta文件以以下标题开头:

>jgi|Penbr2|47586|fgenesh1_pm.1_#_25  
我只想提取标题的最后一部分,如:

>fgenesh1_pm.1_#_25
实际上,我在vim editor中使用了这个正则表达式,但它不起作用:

:%s/^([^|]+\|){3}//g


如果给我一些建议,我会很合适。

您可以使用
sed

sed -e 's/>.*|/>/' fasta-file

i、 e.
|
之间的所有内容都将替换为
您可以使用
sed

sed -e 's/>.*|/>/' fasta-file

i、 e.
|
之间的所有内容都被
替换为

我不知道前面的
是否也是您文本的一部分。假设他们不是

既然您标记了
vim
,那么我就发布vim解决方案

您可以使用regex的“贪婪”:

在vim中:

%s/.*|//
离开最后一部分,这是最简单的方法

在vim中,您也可以使用
\zs、\ze
非贪婪匹配:

%s/\zs.\{-}\ze[^|]\+$//
当然,如果您喜欢分组,可以使用
\(…\)
进行分组,而不使用
\zs\ze

在代码中,只使用
(…)
进行分组,而不进行转义。我不知道您是如何在vimrc中配置
magic
设置的,如果您使用默认设置,您必须退出
(和)
,以赋予它们特殊的含义(在这里分组)。就像我们用BRE做的一样。执行一个
:h magic
,然后找到表格以了解差异


在vim do
:h terms
中获取详细信息。

我不知道前导的
是否也是文本的一部分。假设他们不是

既然您标记了
vim
,那么我就发布vim解决方案

您可以使用regex的“贪婪”:

在vim中:

%s/.*|//
离开最后一部分,这是最简单的方法

在vim中,您也可以使用
\zs、\ze
非贪婪匹配:

%s/\zs.\{-}\ze[^|]\+$//
当然,如果您喜欢分组,可以使用
\(…\)
进行分组,而不使用
\zs\ze

在代码中,只使用
(…)
进行分组,而不进行转义。我不知道您是如何在vimrc中配置
magic
设置的,如果您使用默认设置,您必须退出
(和)
,以赋予它们特殊的含义(在这里分组)。就像我们用BRE做的一样。执行一个
:h magic
,然后找到表格以了解差异


在vim do
:h terms
中获取详细信息。

尝试
s/^\([^ 124;]*.\+//g
。我也尝试了这个命令,但它找不到模式Try
s/^\([^ 124;]*.\+//g
。我也尝试了这个命令,但它找不到模式