2011-06-08 48 views
2

我写了一个简单的PHP shell脚本,用于解析文件并输出某些元素。
它生成大量的输出。在不同的(bash)颜色中,绿色表示确定,黄色表示警告,红色表示错误等。grep on color lines

在开发过程中,我想过滤一些行。例如包含红色文字的所有行。

我可以使用grep(或其他)命令吗?

+0

此处的示例输入/输出将会很好。 – aioobe 2011-06-08 11:27:55

回答

5

我不知道你的输入是什么样子,但作为一个概念证明你可以筛选ls输出使用绿颜色的任何行:

ls --color=always | grep '^[\[01;32m' 

其它颜色查找表可以在这里找到:http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

提示:如果你不知道,上面的^[部分应该像按Ctrl-V输入Esc键(或实际上Ctrl-VCtrl- [在大多数终端上)。 我敢肯定,会有一些选项给grep,使其了解\x1B代替,但我还没有找到它

+0

这篇出色的文章让人想起。为什么你永远不应该解析国会议员的输出http://mywiki.wooledge.org/ParsingLs 没有人反对你的答案,这是一个很好的答案! – 2011-06-08 11:38:13

+0

我知道了:)有人会说我的屁股企图强迫多彩的输出。在这种情况下,完全可以这么做,因为目标是显示包含_green_的ANSI转义的行。关于所述路线的来源,不能推定任何含义,更不用说任何含义。一行的定义在UNIX过滤器上下文中被广泛接受:) – sehe 2011-06-08 11:46:45

+0

谢谢,这就是我一直在寻找的东西! – 2011-06-08 13:46:28

0

据我了解,你解析输入一次,反正上色,对吗?为什么不在同一功能中“切断”警告/错误?使你的脚本使用的命令行选项,例如myscript --nowarnings

getopt为PHP教程here

我不知道任何PHP的,但类似(伪):

paintred(string, show){ 
    match(string); 
    if(show){ 
     print(string) in red; 
    } 
    else return 0; 
} 

show会取决于命令行选项。

这样你只能解析一次文件,并且给未来的用户一个跳过OK行或警告的选项。