使用 sed 在 FASTA header 行的开头和结尾添加单词

Add words at beginning and end of a FASTA header line with sed

我有以下行:

>XXX-220_5004_COVID-A6
TTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAA
AGAAGGTCAAATCAATGATATGATTTTATCTCTTCTTAGTAAAGGTAGACTTATAATTAG
AGAAAACAAC

我想将第一行转换为:

>INITWORD/XXX-220_5004_COVID-A6/FINALWORD
TTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAA
AGAAGGT...

到目前为止,我已经成功添加了第一个单词,如下所示:

sed 's/>/>INITTWORD\//I'

那个returns:

>INITWORD/XXX-220_5004_COVID-A6
    TTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAA
    AGAAGGT

如何在第一行末尾添加 FINALWORD?

多换点就好了。 sed 让您可以方便地回忆与反向引用匹配的文本,因此只需将其嵌入到您要添加的内容之间即可。

sed 's%^>\(.*\)%>INITWORD//FINALWORD%I' file.fasta

我还添加了一个 ^ 行首锚点,并切换为 % 定界符,因此不需要转义斜线。

更详细地说,s 命令的语法是 s/regex/replacement/flags,其中 regex 是匹配要替换的文本的正则表达式,replacement 是替换它的文本。在正则表达式中,您可以使用分组括号 \(...\) 将一些匹配的文本提取到替换中;所以 </code> 指的是匹配第一组分组括号的任何内容, <code> 指的是第二组,等等。 /flags 是可选的单字符说明符,用于修改命令的行为;因此,例如,/g 标志表示要替换一行中的每个匹配项,而不仅仅是第一个匹配项(但我们只希望每行匹配一个,因此在这里没有必要或无用)。

I 标志是非标准的,但由于您正在使用它,我认为它对您有用。