2014-05-21 28 views
0

是否有一种快速和肮脏的方式来打印包含非打印字符的日志文件中的所有行?就像这可以通过生成线如何在日志文件中查找损坏的字符?

TEST Ò 

int main(int arg, char** argv) 
{ 
    char buffer[32]; 
    buffer[0] = 1234; 
    buffer[1] = '\0'; 
    fprintf(stderr, "TEST %s\n", buffer); 
} 
+0

我们可以猜出你需要什么,但是请举出'腐败的人物'和'坏的'printf'调用' –

+0

我假设你指的是非打印字符,比如控制字符? –

+1

是的,非打印字符,我已经用一个例子来澄清。 – dshin

回答

0

使用grep与Perl的正则表达式选项。您可以更改正则表达式目标角色的权利范围,如果这是太包容性的或不包括足够的(也许标签是确定某些Unicode字符可能被认为是OK?):

grep -n -P "[\x01-x\09]|[\x0B-\x0C]|[\x0E-\x1F]|[\x7F-\xFF]" log.txt 
0

我会使用

awk -e '!/^[A-Z]*$/ {print $0}' ./test 

打印所有不包含指定范围字符的行。

说明

awk -e 

调用AWK程序用下面的代码

'!/^[A-Z]*$ 

开始匹配任何不匹配(!)正则表达式^[A-Z]*$

规则
{print $0}' 

如果规则匹配,打印整行

./test 

传递文件进行操作。

注意:请注意,您可能需要修改正则表达式以适合您的数据,因为您没有向我们提供足够的测试数据。