regex 有条件地修改记录的最后一个字段[关闭]

bvpmtnay  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

上个月关门了。
这篇文章上个月被编辑并提交审查,未能重新打开帖子:
原始关闭原因未解决
Improve this question
我有一个用空格分隔列的文件,其中有几列是用点分隔的字符串。下面显示了一个示例。
我需要做的是删除列的最后一个(点分隔)字段,如果第一个字段等于某个值。
使用上面的例子,如果列的第一个字段是“ABC”,我想有最后一个字段,“.W”,删除。预期的产出将是

t9aqgxwy

t9aqgxwy1#

你可以使用下面的正则表达式并用group1匹配的内容替换它,

\b(ABC\.\S+)\.[^. ]+\b

这个正则表达式从单词边界开始捕获ABC,以避免像XABC那样部分匹配ABC,然后匹配文字.,后跟非空格字符,直到最后一个文字.后跟一个或多个非点非空格字符,这部分\.[^. ]+被删除,因为group1捕获了预期的文本。如果你需要任何关于正则表达式的进一步澄清,请随时告诉我。
使用以下命令进行验证,它可以按照您想要的方式工作。

$ cat t.txt
1 XYZ.145.V ABC.123.W
2 XYZ.261.V XYZ.145.V
3 ABC.123.W XYZ.261.V

$ cat t.txt |sed -E 's/\b(ABC\.\S+)\.[^. ]+\b/\1/g'
1 XYZ.145.V ABC.123
2 XYZ.261.V XYZ.145.V
3 ABC.123 XYZ.261.V

相关问题