首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用bash/shell更改特定的列内容字符串?

如何使用bash/shell更改特定的列内容字符串?
EN

Stack Overflow用户
提问于 2018-06-10 04:31:04
回答 2查看 23关注 0票数 0

我有一个如下所示的.txt文件(大约400行):

lettuceFMnode_1240 J_C7R5_99354_KNKSR3_Oligomycin 81.52

lettuceFMnode_3755 H_C1R3_99940_KNKSF2_Tubulysin 70

lettuceFMnode_17813 G_C4R5_80184_KNKS113774F_Tetronasin 79.57

lettuceFMnode_69469 J_C11R7_99276_KNKSF2_Nystatin 87.27

我想要编辑整个第二列中的名字,以便只保留最后一部分(意思是删除之前的任何内容,所以实际上保留最后_之后的内容)。我使用cutsed的组合研究了不同的解决方案,但不能理解代码应该如何构建。如有建议和帮助,我将不胜感激!

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 04:43:02

这里有一种方法:

perl -pe 's/^\S+\s+\K\S+_//'

对于每一行输入(-p),我们执行一些代码(-e ...)。

代码执行替换(s/PATTERN/REPLACEMENT/)。

模式匹配如下:

下划线1或更多非空格字符的开头(第一个下划线1或更多空格字符(第一个column)

  • \K后面的空格不会将到目前为止匹配的文本视为最终match

  • \S+ 1或更多非空格字符的一部分)(第二个下划线为column)

  • _

因为+是贪婪的(它匹配尽可能多的字符),所以\S+_将匹配直到第二列中的最后一个_为止的所有内容。

因为我们使用了\K,所以只有模式的其余部分(即匹配的第二列中的部分)会被替换。

替换字符串为空,因此有效地删除了匹配。

票数 0
EN

Stack Overflow用户

发布于 2018-06-11 16:47:28

使用sed:

sed 's/ [^ ]*_/ /' file

先替换第一个空格,然后替换非空格字符([^ ]*),然后使用_替换一个空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档