You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中如何保留指定字符串并移除其后所有字符(以.com为例)

解决保留.com并删除其后字符的问题

你的问题出在sed命令里的正则表达式:.在正则中是匹配任意单个字符的通配符,不是字面意义的点,所以sed 's/.com.*//'实际上是把匹配到的「任意字符+com+后续所有内容」都替换为空,自然就把.com也删掉了。

要实现保留.com并删除其后所有内容,有两种简单的方法:

方法一:直接替换.com及后续内容为.com

把字面量的.用反斜杠转义(\.),然后将\.com.*整体替换为.com:

cat test1.txt | grep .com | sed 's/\.com.*/.com/'

执行后输出结果:

abc.test.com
efg.test.com
xyz.test.com
xab.test.com
lmn.test.com
com.test.com

方法二:捕获.com并保留

用正则捕获组把.com存起来,替换时只保留捕获的内容:

cat test1.txt | grep .com | sed 's/\(\.com\).*/\1/'

这个命令里,\(\.com\)是捕获组,把匹配到的.com保存下来,\1代表引用第一个捕获组的内容,这样就能保留.com,同时删掉后面的所有字符,效果和方法一完全一致。

另外,你也可以简化管道,把grep和sed合并成一个sed命令,效率更高:

sed -n '/\.com/s/\.com.*/.com/p' test1.txt

-n表示只输出处理过的行,/\.com/用来筛选包含.com的行,后面的替换逻辑和方法一相同。

内容的提问来源于stack exchange,提问作者Tony Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:46:03