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

Unix环境下如何从abc.txt移除.tar行并保留.tar.gz行?

解决方法:移除含.tar后缀的行,保留.tar.gz的行

嘿,我来帮你搞定这个问题!你之前执行的sed -i "/*.tar/d" abc.txt没成功,主要是两个关键问题:

  1. 混淆了shell通配符和正则表达式:sed使用的是正则表达式,而*在正则里表示“匹配前面字符0次或多次”,不是shell里的“任意字符”;而且你没转义.——正则里.代表任意单个字符,直接写.tar会匹配比如xtar、atar这类字符串,不是你要的.tar后缀。
  2. 没有限定行尾匹配:如果只写.tar,会误匹配.tar.gz里的.tar部分,导致把你想保留的行也删掉了。

正确的sed命令

用这个命令就能精准删除仅以.tar结尾的行,保留.tar.gz的行:

sed -i '/\.tar$/d' abc.txt

解释一下每个部分:

  • \/\.tar$/:正则表达式,\.转义后表示实际的点号,$表示匹配行的末尾,整体意思是“匹配行尾是.tar的行”
  • d:sed的删除命令,把匹配到的行删掉
  • -i:直接修改原文件(如果是macOS的sed,需要写成sed -i '' '/\.tar$/d' abc.txt,注意空参数)

替代方法:用grep反向匹配

如果你对sed不太熟悉,也可以用grep来实现:

grep -v '\.tar$' abc.txt > temp.txt && mv temp.txt abc.txt
  • -v:反向匹配,输出不匹配指定模式的行
  • 把结果临时存到temp.txt,再覆盖原文件(避免直接重写原文件导致的问题)

测试一下你的示例内容,执行命令后,abc.txt里会剩下:

HUW_3356_DLM4_00_00.tar.gz、HUW_3359_DLM4_01_00.tar.gz、HUW_3360_DLM4_02_00.tar.gz

完美符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:01:44