how to rename fasta file headers using sed

fasta, sed

Solution

You can use only sed with its substitute command, checking if the line begins with `>` character, group the whole line and append your string at the end, like:

sed 's/^\(>.*\)$/\1 Brassica rapa/' infile

It yields:

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT

Problem

i know this is pretty easy but i can't get it to work. I am trying to rename the header using sed and evnethough the reg experssion works but i can't rename the fasta header. Here is an small example. I have a multi sequence fasta file something like below ``` >Bra000001 CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT >Bra000002 TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT ``` Now i just want to add "Brassica rapa" at the end of fasta header like this ``` >Bra000001 Brassica rapa CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT >Bra000002 Brassica rapa TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT ``` I am doing this for making it work ``` grep ">" in.fa | sed 's/$/ Brassica rapa/' > out.fa ``` However by doing this i can only change the headers but no sequence info here. Ideally i want to both change the header and keep the sequence as it is.

Original source