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

如何在Linux Bash中删除file.txt指定字符串区间内容并保留指定前缀

解决Bash文本处理需求:保留指定内容并删除特定区间

嗨,这就帮你搞定!你需要从file.txt里删掉从:tt_到_ZA之间的所有内容,只保留开头的Osmun.Prez@mail.com:c7lB2m6b@3.a.a,下面给你几个简单好用的Bash实现方法:

方法1:使用sed命令(最常用的文本处理工具)

sed的字符串替换功能刚好适配这个需求,直接执行以下命令即可看到结果:

sed 's/:tt_.*_ZA//' file.txt

细节说明:

  • s/旧内容/新内容/是sed的核心替换语法,这里我们把匹配到的目标区间替换为空字符串,从而保留前面需要的内容
  • :tt_.*_ZA是正则表达式::tt_精准匹配起始标记,.*是贪婪匹配任意字符(会一直匹配到最后出现的_ZA,完全符合你说的唯一一次出现的场景),_ZA匹配结束标记
  • 如果想要直接修改原文件(推荐先备份,可加-i.bak生成备份文件),可以用:
    # Linux系统
    sed -i 's/:tt_.*_ZA//' file.txt
    # macOS系统(BSD版本sed需要额外空参数)
    sed -i '' 's/:tt_.*_ZA//' file.txt
    

方法2:使用awk命令

awk也是处理文本的强大工具,用它实现的命令如下:

awk '{sub(/:tt_.*_ZA/, "")}1' file.txt

细节说明:

  • sub(/匹配模式/, "替换内容")是awk中替换第一个匹配项的内置函数,这里我们将匹配到的区间替换为空
  • 末尾的1是awk的极简语法,作用是触发打印处理后的每一行内容
  • 若要将结果保存到新文件,或者安全覆盖原文件,可以这样写:
    # 保存到新文件
    awk '{sub(/:tt_.*_ZA/, "")}1' file.txt > cleaned_file.txt
    # 覆盖原文件(先写入临时文件再替换,避免意外丢失数据)
    awk '{sub(/:tt_.*_ZA/, "")}1' file.txt > temp.txt && mv temp.txt file.txt
    

方法3:使用Bash变量参数展开(纯Bash实现,适合脚本场景)

如果需要在Bash脚本内处理,也可以先把文件内容读到变量中,用Bash自带的参数展开功能完成替换:

content=$(cat file.txt)
echo "${content/:tt_*_ZA/}"

细节说明:

  • ${变量/匹配模式/替换内容}是Bash的参数展开语法,会替换变量中第一个匹配的模式,这里我们把:tt_*_ZA匹配的内容替换为空
  • 这种方式不需要依赖任何外部工具,纯Bash环境就能运行,适合轻量化脚本开发

内容的提问来源于stack exchange,提问作者Михаил Ммк

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:02:28