Замена спецсимвола новой строкой - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть следующие строки в текстовом файле. Я хотел бы удалить последний '_' и добавить символ новой строки после этого.

>15_48499991_ENSG00000074803_C_G_G_CCAATCGCTTTCAAGTTAGTGTG
>15_48499991_ENSG00000074803_C_G_G_CAATCGCTTTCAAGTTAGTGTGA
>15_48499991_ENSG00000074803_C_G_G_AATCGCTTTCAAGTTAGTGTGAT

Desired output:

>15_48499991_ENSG00000074803_C_G_G
CCAATCGCTTTCAAGTTAGTGTG
>15_48499991_ENSG00000074803_C_G_G
CAATCGCTTTCAAGTTAGTGTGA
>15_48499991_ENSG00000074803_C_G_G
AATCGCTTTCAAGTTAGTGTGAT

Я использовал приведенный ниже запрос SED для выполнения этой операции. Я не могу выяснить проблему в моем запросе.

sed 's/\_/'\n'/g'

1 Ответ

3 голосов
/ 13 февраля 2020

Вы можете .* съесть столько строк, сколько сможете (потому что * является жадным), прежде чем сопоставить _:

sed 's/\(.*\)_/\1\n/' file

или спорным лучше

sed -E 's/(.*)_/\1\n/' file

Что касается вашей попытки, у нее есть 3 ошибки:

  • _ не нужно экранировать
  • ' не может быть вложенным (это из-за оболочки, а не sed); fwiw, я не понимаю, почему вы положили их туда: что вы пытались сделать?
  • если вы исправите два приведенных выше, заканчивая sed 's/_/\n/g', вы замените все _ с, а не только последний.
...