如何解决从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\\\"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。