我有一个 fasta 文件,如下所示,
>accessory/4745/24/lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>accessory/95/89.78/lake_sample_pv_strain_LH201_Gene125
TAGTCT
我需要accessory/numericals/numericals/
从 fasta 标头中删除 的字符,因此我使用了以下命令,但它未能达到我的目的。
sed 's/accessory[/][0-9][/][0-9]//g' accessory.fasta
预期输出是
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT
请帮我解决这个问题。提前致谢。
答案1
你的正则表达式正在寻找“accessory/
然后一个号码( [0-9]
),然后是一个/
“,它不会出现在您的文件中。您想要搜索一个或多个数字,并且您还希望允许.
它不是数字。因此,使用与原始逻辑相同的逻辑,您会想要这样的东西:
$ sed -E 's/accessory[/][0-9.]+[/][0-9.]+[/]//' accessory.fasta
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT
请注意我没有使用g
修饰符,因为它在这里没有用,因为每行只有一个匹配项。
然而,这是不必要的限制。如果文件如您所示,您只想删除所有内容,直到最后/
一行:
$ sed -E 's|>.*/|>|' accessory.fasta
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT
该s///
运算符可以采用任何字符作为分隔符。因此,既然我知道我需要匹配/
,我就会s|||
避免需要逃避/
.
如果您确实需要像原来那样受到限制,您可以简化为:
$ sed -E 's|accessory/[0-9.]+/[0-9.]+/||' accessory.fasta
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT