2011-06-13 6 views
0

별표 기계에서 나를 위해 약간의 로깅을 수행하는 작은 스크립트를 작성하고있었습니다. 리눅스 (centOS) 명령 줄에서 다음을 입력 할 수 있습니다.sed 출력의 스트립 색상 코드

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 스크립트가 잘 작동 함을 발견했다; 예상대로 #encoders : #decoders를 출력합니다. 나는 PHP 스크립트를 실행하지만, 그것은 로그 파일에이 같은 라인을 작성하고 다음^[[0 곳

2011-06-13 10:24:02  ^[[0;37;40m6 6 

나는 알아낼 수 없습니다; 37; 40m가에서오고있다. 그것은 쉘에서 텍스트를 표시하기위한 색상을 설정하는 색상 코드입니다 만, sed가 추가하거나 원래 출력에서 ​​오는 것입니까? 어떻게 제거합니까? echo 문을 사용하여 $ encoders 및 $ decoder 변수를 명령 행에 인쇄 할 경우 특별한 색상 형식이 없으며 원래 별표 -rx 명령의 출력에도 없습니다.

답변

3

sed입니다. 색상 코드를 추가하는 것만으로도 별표가 전달됩니다. 당신이 정말로하고 싶은 것은 Asterisk의 출력물로 그 색상 코드가 없다는 것입니다.

-n 명령은 ANSI 컬러 지원을 제거합니다 : 당신은, 내가 잘못 트리를 마우스 오른쪽 짖는 된 것 Asterisk man page

asterisk -nrx \"transcoder show\" 
+0

,이 트릭은 않았다! – ctb