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

如何过滤命令输出中的ANSI转义序列,去除颜色代码?

解决远程grep着色输出与纯文本保存的冲突问题

问题根源

使用ssh -t时,远程主机的grep会判定输出连接的是终端,因此通过--color参数输出包含ANSI颜色转义码的内容;当用tee保存输出时,这些转义码会被一并写入文件,导致文件包含无用的控制字符。

可行解决方案

我们需要实现终端显示着色输出,同时保存到文件的内容为纯文本,以下是两种实用方法:

方法一:进程替换分离输出流

通过tee将输出同时发送到终端(保留颜色)和一个处理转义码的进程,处理后的内容写入文件:

ssh -t box grep --color=always needle haystack.txt | tee >(sed -r 's/\x1b\[[0-9;]*m//g' > record.txt)
  • --color=always:强制grep输出颜色转义码,确保终端能显示着色效果
  • tee >(...):进程替换语法,将输出分两路:一路直接输出到当前终端(正常显示颜色),另一路通过sed移除所有ANSI颜色转义码后写入record.txt

方法二:移除ssh -t并强制着色(简化版)

如果本地终端支持解析ANSI转义码,可以去掉ssh -t,直接强制grep输出颜色,再用同样的方式处理文件保存:

ssh box grep --color=always needle haystack.txt | tee >(sed -r 's/\x1b\[[0-9;]*m//g' > record.txt)

这种方式更简洁,只要本地终端支持颜色显示,就能看到和带-t时一致的着色效果,同时文件保存纯文本。

效果验证

执行命令后:

  • 终端会正常显示grep匹配结果的着色效果
  • 打开record.txt,里面只会包含纯文本的匹配内容,无任何颜色转义码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:42:45