用新行替换特殊字符

Replacing special character by new line

我在文本文件中有以下几行。我想删除最后一个 '_' 并在其后添加一个换行符。

>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'

在匹配 _:

之前,你可以让 .* 吃掉尽可能多的行(因为 * 是贪婪的)
sed 's/\(.*\)_/\n/' file

或有争议的更好

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

关于您的尝试,它有 3 个错误:

  • _不需要转义
  • '不能嵌套(这是因为shell,而不是sed);首先,我不明白你为什么把它们放在那里:你想做什么?
  • 如果您修复以上两项,以 sed 's/_/\n/g' 结尾,您将替换所有 _,而不仅仅是最后一个。