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

如何使用sed替换日志或文本文件中的^B控制字符?

解决sed替换多个ASCII控制字符的问题

先搞懂原来的命令为啥管用

你之前用的sed 's/\x1/\|/g'里,\x1是sed支持的十六进制转义写法,对应ASCII码为0x01(十进制1)的控制字符——也就是你看到的^A(Ctrl+A的ASCII编码就是1)。s/原内容/替换内容/g是sed的全局替换语法,\|是转义后的竖线(因为竖线在sed里有特殊含义,所以要加反斜杠转义),g表示一行里所有匹配的内容都替换,不是只换第一个。

处理^B及更多控制字符的修改方案

^B对应的ASCII码是0x02(十进制2),要同时替换^A和^B,只需要把两个十六进制转义字符放进sed的**字符集[]**里就行:

sed 's/[\x1\x2]/|/g'

这个命令会把文本中所有的^A(\x1)和^B(\x2)都替换成竖线|。

扩展:处理更多控制字符

如果要覆盖更多ASCII控制字符(比如从^A到^Z,对应ASCII码1到26),可以用十六进制范围写法:

sed 's/[\x1-\x1A]/|/g'

这里\x1A是十进制26的十六进制表示,对应^Z。

要是想替换所有非打印的ASCII控制字符(包括DEL字符^?,对应ASCII码0x7F),可以用这个范围:

sed 's/[\x01-\x1F\x7F]/|/g'

注:\x00(空字符)比较特殊,sed默认处理起来有问题,一般日志里也很少出现,所以这里没包含。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:22:05