【发布时间】:2021-10-20 15:25:53
【问题描述】:
我有一个文件,其中包含包含各种信息的行。不幸的是,该文件是从许多不同的来源编译的,因此某些行比其他行包含更多信息:
1_10090 Mus musculus (house mouse) Gene 1
2_10090 Mus musculus Gene 2
3_10090 (house mouse) Gene 3
4_10090 Gene 4
我想要的输出是:
1_10090 Mus musculus (house mouse) Gene 1
2_10090 Mus musculus (house mouse) Gene 2
3_10090 Mus musculus (house mouse) Gene 3
4_10090 Mus musculus (house mouse) Gene 4
我想使用 sed 将包含 _10090 后跟除“M”以外的字符的每一行替换为“Mus musculus”(然后对不包含(家鼠)的行执行相同操作):
sed 's/_10090 [^M]/_10090 Mus musculus /g'
但这当然会替换我想要保留的 10090 之后的字符:
1_10090 Mus musculus (house mouse) Gene 1
2_10090 Mus musculus Gene 2
3_10090 Mus musculus house mouse) Gene 3
4_10090 Mus musculus ene 4
我该如何确保每一行都以
开头#_10090 Mus musculus (house mouse)
每行之间的#是不同的,有些行已经包含这个字符串,而其他行包含它的一部分?
提前致谢!
【问题讨论】:
-
(house mouse)是固定字符串吗,还是(...)里面有什么东西? -
请检查ideone.com/52hZt6 是否适合您。
-
@WiktorStribiżew(家鼠)是一个固定字符串。唯一不同的是出现在 _10090 之前的字符和出现在(鼠标)之后的字符
-
@WiktorStribiżew 我试过了,我认为成功了!非常感谢!
-
我在下面的答案中添加了方法说明。