sed:为匹配行保留某些内容

sed: keep certain contents for matched lines

我在一个 fasta 文件中有许多序列,如下所示(从 UniProtKB 下载):

>sp|P00045|CYC7_YEAST Cytochrome c iso-2 OS=Saccharomyces cerevisiae (strain ATCC 204508 / S288c) GN=CYC7 PE=1 SV=1
MAKESTGFKPGSAKKGATLFKTRCQQCHTIEEGGPNKVGPNLHGIFGRHSGQVKGYSYTD
ANINKNVKWDEDSMSEYLTNPKKYIPGTKMAFAGLKKEKDRNDLITYMTKAAK

因为它们都是细胞色素 c 的氨基酸序列,所以我只关心生物体(即 Saccharomyces cerevisiae 用于上述条目)。所以我想修改这些序列的 headers 如下:

>Saccharomyces cerevisiae
MAKESTGFKPGSAKKGATLFKTRCQQCHTIEEGGPNKVGPNLHGIFGRHSGQVKGYSYTD
ANINKNVKWDEDSMSEYLTNPKKYIPGTKMAFAGLKKEKDRNDLITYMTKAAK

有机体名称总是在 "OS=" 之后,并在以下任一情况下停止:

  1. space(.*) #菌株信息
  2. space..=

满足了。

那么有人可以给我一些制作方法的线索吗?谢谢!

你可以使用这个:

sed 's/.*OS=\([^(]*\).*/>/' input