Как добавить первый шаблон регулярного выражения в конец строки с помощью sed?

текстовый файл с данными о последовательности ДНК в файле a. следующим образом:

>uce-8374_Genus_species
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCGCGGTATATCGGCGATTCGATCG

>uce-239_Genus_species
ATCGTAGCATGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCGTCTGGTCGTACGATTACTACGACTGCG

>uce-83_Genus_species
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_species
AGCTGACTAGCTGGCGATACTGGCGATATCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC

Я пытаюсь добавить все перед первым подчеркиванием, которому предшествует | , чтобы только конец строк имел > . Так, например, первая последовательность будет выглядеть так: uce-8374_Genus_species | uce-8374 , за которой следует последовательность ДНК под ней. Есть ли способ сделать это в sed? Я попытался сохранить ^ [^ _] + (? = _) в переменной, но это не сработало, и я просто продолжал добавлять ^ [^ _] + (? = _) до конца строки вместо самого узора. Любая помощь, а также объяснения (поскольку я новичок в регулярных выражениях) были бы полезны. Если есть лучший способ сделать это, я открыт для других вариантов!

Пока что я пробовал (я просто покажу первую последовательность ДНК, но хочу изменить их все):

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 | ^ [^ _] + (? = _)

0
задан 19 August 2021 в 06:39

1 ответ

В отличие от Perl, sed не поддерживает синтаксис просмотра вперед PCRE (? = _) , но вы можете подделать его следующим образом:

  • match > , привязанный к началу строки ^>
  • , затем сопоставить и захватить ноль или более символов, отличных от _ ([^ _] *)
  • затем сопоставьте все остальное . *

затем замените на

  • весь сопоставленный шаблон &
  • , за которым следует литерал | , а затем первая захваченная группа \ 1

Итак

$ sed -E 's/^>([^_]*).*/&|\1/' sample_file.fasta 
>uce-8374_Genus_species|uce-8374
ACGTACGTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTACGATCGCGGTATATCGGCGATTCGATCG

>uce-239_Genus_species|uce-239
ATCGTAGCATGCGCTAGCTAGCTAGCTCGCGGTACGCATGTCTGACTGCGTCTGGTCGTACGATTACTACGACTGCG

>uce-83_Genus_species|uce-83
ATCGATCTAGCGTAGCATGCGATCGATATCTGCGATCGACTCGATGCATGCATGCATCGATGCTAGCTAGCTAGCTA

>uce-902_Genus_species|uce-902
AGCTGACTAGCTGGCGATACTGGCGATATCGGATTACGCGGCATATCGAGCGAGTCGATCGATGCATCTGATGCAGC
2
ответ дан 20 August 2021 в 10:26

Другие вопросы по тегам:

Похожие вопросы: