Удалите код цвета из вывода sed - PullRequest
0 голосов
/ 13 июня 2011

Я работал над небольшим сценарием, который бы выполнял некоторые записи для меня с компьютера со звездочкой.В командной строке 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 в командную строку, специального цветового форматирования не будет, и в выводе исходной команды asterisk -rx нет.

1 Ответ

3 голосов
/ 13 июня 2011

Дело не в том, что sed - это добавление цветовых кодов, просто оно проходит через Asterisk.То, что вы действительно хотите сделать, - это получить выходные данные от Asterisk, у которого для начала нет этих цветовых кодов.

Команда -n исключит поддержку цвета ANSI: Страница man Asterisk

asterisk -nrx \"transcoder show\"
...