从sed输出中剥离颜色代码

问题描述

| 我正在编写一个小脚本,该脚本可以从星号计算机上为我进行一些日志记录。在linux(centOS)命令行中,我可以输入:
asterisk -rx \"transcoder show\"
提供我需要记录的输出。此输出如下所示:
5/5 encoders/decoders of 120 channels are in use.
我想在日志文件中写一行,如下所示:
YYYY-MM-DD HH-MM-SS     #encoders     #decoders
然后每隔几分钟就记录一次,并有一个历史记录,说明我正在使用多少个频道。所以我写了一个小PHP脚本:
<?php
exec(\"asterisk -rx \\\"transcoder show\\\" | sed \'s|\\\\([0-9]*\\\\)\\/\\\\([0-9]*\\\\).*|\\\\1:\\\\2|\'\",$retval);
$time = date(\'Y-m-d h:i:s\');
$vals = explode(\":\",$retval[0]);
$encoders = trim($vals[0]);
$decoders = trim($vals[1]);
$logString = \"$time\\t$encoders\\t$decoders\\n\";
$fh = fopen(\'/root/script/trans.log\',\'a\');
fwrite($fh,$logString);
fclose($fh);
?>
抱歉,那里的代码有点时髦,理论上我应该可以输出sed所需的确切信息,但是我更改了它以尝试解决以下问题之后,您看到的代码还是存在的。在测试中,我发现sed脚本可以从命令行正常运行;它按预期输出#encoders:#decoders。但是,当我运行php脚本时,它正在将这样的行写入日志文件:
2011-06-13 10:24:02     ^[[0;37;40m6    6
我不知道^ [[0; 37; 40m来自哪里。据我了解,这是一种颜色代码,用于设置在外壳中显示文本的颜色,但是sed是否正在添加某些东西,或者它来自原始输出?我如何摆脱它?如果我使用echo语句将变量$ encoders和$ decoders打印到命令行,则没有特殊的颜色格式,原始星号-rx命令的输出中也没有。     

解决方法

        不是ѭ5添加颜色代码,而是从Asterisk传递颜色代码。您真正想要做的是从Asterisk接收输出,而这些输出没有这些颜色代码开头。
-n
命令将删除ANSI颜色支持:Asterisk手册页
asterisk -nrx \\\"transcoder show\\\"
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...