首页 > 解决方案 > 用新行替换特殊字符

问题描述

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

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

标签: regexsedsubstitution

解决方案


在匹配之前,您可以.*尽可能多地吃线(因为很贪心) :*_

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

或者有争议的更好

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

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

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

推荐阅读