Busybox syslogd将 输出为字面字符^M,如何无需删除 修复?
解决Busybox syslogd保留\r导致输出^M的问题
方法1:调整Busybox syslogd启动参数或编译配置
Busybox syslogd默认会将\r转义为^M(ASCII 0x5E+0x4D),可通过以下方式修改:
- 启动时加参数:部分版本的Busybox syslogd支持
-c参数,执行syslogd -c 0可以禁用控制字符转义,直接保留原始换行逻辑。修改系统启动脚本(如/etc/init.d/syslogd),将启动命令替换为该指令,重启syslogd服务即可生效。 - 重新编译Busybox:运行
make menuconfig进入配置界面,找到System Logging Utilities -> syslogd选项,检查是否存在禁用回车转义的开关(如FEATURE_SYSLOGD_CRLF类选项),关闭后重新编译Busybox并替换系统中的二进制文件。
方法2:用过滤工具预处理日志输出
如果无法修改Busybox,可在日志写入前通过管道过滤掉\r:
- 使用
sed过滤:修改syslogd启动命令为syslogd -O "|sed 's/\r//g' > /var/log/messages",所有日志中的\r会被自动剔除,无需修改业务代码。 - 使用
awk精准处理行尾\r:执行syslogd -O "|awk '{sub(/\r$/,"")}1' > /var/log/messages",仅删除行尾的回车符,不影响其他位置的合法字符。
方法3:终端临时调整显示(仅缓解查看问题)
如果只是终端查看日志时显示^M,可执行stty -icrnl关闭终端的回车转义,此时终端会将\r识别为换行而非显示^M,但日志文件中仍会保留转义后的字符,仅适合临时调试场景。
内容的提问来源于stack exchange,提问作者Kenza
相关产品推荐
相关产品推荐

