需要在sed命令中指定数字

需要在sed命令中指定数字

我有一个 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

相关内容