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

如何在MacOS终端批量删除文件中两个标记间的所有内容?

解决Mac Terminal批量删除文件中KEYWORD1之后、KEYWORD2之前内容的问题

Mac自带的是BSD版本sed,和Linux的GNU sed语法差异较大,这是你之前的命令失效的原因。以下是适配Mac环境的解决方案:

单个文件处理

使用sed的静默模式(-n)打印需要保留的内容段:

sed -n '1,/KEYWORD1/p; /KEYWORD2/,$p' filename

这个命令会:

  • 打印从文件开头到包含KEYWORD1的行的所有内容
  • 打印从包含KEYWORD2的行到文件结尾的所有内容
    从而自动跳过KEYWORD1之后到KEYWORD2之前的部分。

如果需要直接修改文件(并生成备份),添加-i.bak参数(.bak是备份文件的后缀,可自定义):

sed -i.bak -n '1,/KEYWORD1/p; /KEYWORD2/,$p' filename

批量处理文件

处理当前目录下所有文件(不含子目录)

用循环遍历所有文件:

for file in *; do
  sed -i.bak -n '1,/KEYWORD1/p; /KEYWORD2/,$p' "$file"
done

处理指定类型文件(含子目录)

用find命令递归查找并处理:

find . -type f -name "*.txt" -exec sed -i.bak -n '1,/KEYWORD1/p; /KEYWORD2/,$p' {} \;

把*.txt换成你需要的文件后缀(比如*.md)即可。

注意事项

  1. 特殊字符转义:如果KEYWORD1或KEYWORD2包含正则特殊字符(如.、*、/),可以换用其他分隔符(比如|)避免转义:
    sed -n '1,|KEYWORD_WITH_SLASH|p; |ANOTHER_KEYWORD|,$p' filename
    
  2. 无匹配情况:如果文件中不存在KEYWORD1,只会保留KEYWORD2及之后的内容;如果不存在KEYWORD2,只会保留到KEYWORD1的内容。
  3. 清理备份文件:确认处理无误后,可删除所有备份文件:
    rm *.bak
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:02:13