ฉันมีไฟล์ .fasta (ข้อความ) ที่มีข้อมูลลำดับ DNA ในรูปแบบดังต่อไปนี้:
>uce-8374_Genus_สปีชีส์
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCGCGGTATTATCGGCGATTCGATCG
>uce-239_Genus_สปีชีส์
ATCGTAGCATGGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCCGTCTGGTCGTACGATTACTACGACTGCCG
>uce-83_Genus_สปีชีส์
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA
>uce-902_Genus_สปีชีส์
AGCTGACTAGCTGGCGATACTGGCGATTCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC
ฉันพยายามผนวกทุกอย่างก่อนหน้า แรก ขีดล่างนำหน้าด้วย |
เฉพาะส่วนท้ายของบรรทัดเท่านั้นที่มี >
. ตัวอย่างเช่น ลำดับแรกจะอ่านว่า:
uce-8374_Genus_species|uce-8374
ตามด้วยลำดับดีเอ็นเอข้างใต้ มีวิธีการทำเช่นนี้ใน sed หรือไม่? ฉันพยายามเก็บ ^[^_]+(?=_)
ลงในตัวแปร แต่มันใช้งานไม่ได้และยังคงต่อท้าย ^[^_]+(?=_)
ไปที่จุดสิ้นสุดของเส้นแทนที่จะเป็นรูปแบบ ความช่วยเหลือใด ๆ รวมถึงคำอธิบาย (เนื่องจากฉันยังใหม่กับ regex) จะเป็นประโยชน์ หากมีวิธีที่ดีกว่านี้ ฉันเปิดรับตัวเลือกอื่น!
จนถึงตอนนี้ ฉันได้ลองแล้ว (ฉันจะแสดงลำดับ DNA แรกเท่านั้น แต่ฉันต้องการเปลี่ยนทั้งหมด):
sed -E 's/species/species|^[^_]+(?=_)/' sample_file.fasta
ผลลัพธ์: uce-8374_Genus_species|^[^_]+(?=_)
และฉันได้พยายามด้วย:
x="^[^_]+(?=_)"
sed -E "s/species/species|$x/" "sample_file.fasta"
ผลลัพธ์: uce-8374_Genus_species|^[^_]+(?=_)