gpt4 book ai didi

linux - 如何修改行首有字符的模式

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:06 25 4
gpt4 key购买 nike

我有一个如下所示的数据文件:

Node_4_length augustus gene 234 1252 g361
Node_4_length augustus gene 1543 2252 . transcript_id "g361.t1";
Node_4_length augustus gene 3343 7552 . transcript_id "g361.t1";
protein sequence = [MRSVSLFLLGLAPLL]
Node_5_length augustus gene 334 1252 g362
Node_5_length augustus gene 4543 8252 . transcript_id "g362.t1";
Node_5_length augustus gene 19343 27552 . transcript_id "g362.t1";
protein sequence = [SNLVDWSEPTLTTIEEDTAGMAWA]

我想用该行中的前 10 个左右字符修改 script_id 中的文本(给定文件可能有 >1000 个节点,因此我需要它来捕获整个节点号 - 但如果它捕获一些单词“length”,那就没问题了)。因此,对于上面的第一组数据,我希望它读取:

Node_4_length augustus gene 234 1252 g361
Node_4_length augustus gene 1543 2252 . transcript_id "Node_4_g361.t1";
Node_4_length augustus gene 3343 7552 . transcript_id "Node_4_g361.t1";
protein sequence = [MRSVSLFLLGLAPLL]
Node_5_length augustus gene 334 1252 g362
Node_5_length augustus gene 4543 8252 . transcript_id "Node_5_g362.t1";
Node_5_length augustus gene 19343 27552 . transcript_id "Node_5_g362.t1";
protein sequence = [SNLVDWSEPTLTTIEEDTAGMAWA]

我已经尝试过:

sed 's/transcript_id "/transcript_id "SOMETHING/'  

但无法弄清楚要在 sed 的第二部分中放入什么内容,以便使用同一行中的 Node_#### 修改第一部分。

最佳答案

假设行中的第一个单词始终以 _length 结尾,则此 sed 命令应该执行此操作:

sed 's/^\(.*_\)length .* transcript_id "/&\1/' test.txt

输出:

Node_4_length augustus gene 234 1252 g361
Node_4_length augustus gene 1543 2252 . transcript_id "Node_4_g361.t1";
Node_4_length augustus gene 3343 7552 . transcript_id "Node_4_g361.t1";
protein sequence = [MRSVSLFLLGLAPLL]
Node_5_length augustus gene 334 1252 g362
Node_5_length augustus gene 4543 8252 . transcript_id "Node_5_g362.t1";
Node_5_length augustus gene 19343 27552 . transcript_id "Node_5_g362.t1";
protein sequence = [SNLVDWSEPTLTTIEEDTAGMAWA]

如果您不确定后缀“_length”,请尝试此操作:

sed 's/^\(.\{10\}\).*transcript_id "/&\1/'

输出:

Node_4_length augustus gene 234 1252 g361
Node_4_length augustus gene 1543 2252 . transcript_id "Node_4_leng361.t1";
Node_4_length augustus gene 3343 7552 . transcript_id "Node_4_leng361.t1";
protein sequence = [MRSVSLFLLGLAPLL]
Node_5_length augustus gene 334 1252 g362
Node_5_length augustus gene 4543 8252 . transcript_id "Node_5_leng362.t1";
Node_5_length augustus gene 19343 27552 . transcript_id "Node_5_leng362.t1";
protein sequence = [SNLVDWSEPTLTTIEEDTAGMAWA]

说明

在这两种情况下,您都会看到以下替换模式:

&\1

& 捕获整个匹配,即从行开头 (^) 到开头引号 (") 的所有内容。对于示例输入的第二行,这将是:

Node_4_length augustus gene 1543 2252 . transcript_id "

\1 捕获第一个捕获子模式,即 \(\) 之间的所有内容。在我的第一个 sed 命令中,这将是:

Node_4_

这使得完整的替换字符串:

Node_4_length augustus gene 1543 2252 . transcript_id "Node_4_

最初跟在开头引号后面的所有内容都不受影响,因为它与模式不匹配。这使得完整的输出:

Node_4_length augustus gene 1543 2252 . transcript_id "Node_4_g361.t1";

关于linux - 如何修改行首有字符的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54244001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com