如何在日志文件中找到损坏的字符?

时间:2014-05-21 20:42:47

标签: unix

是否有快速而肮脏的方法来打印包含非打印字符的日志文件中的所有行?喜欢这条线

TEST Ò

可以通过以下方式生成:

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

2 个答案:

答案 0 :(得分:0)

将grep与perl正则表达式选项一起使用。你可以改变正则表达式来定位正确的字符范围,如果它太包容或不够包容(也许标签可以吗?某些unicode字符可能被认为是好的吗?):

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

答案 1 :(得分:0)

我使用

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

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

<强>解释

awk -e

使用以下代码

调用AWK程序
'!/^[A-Z]*$

启动一条规则,匹配任何不匹配(!)正则表达式^[A-Z]*$

的内容
 {print $0}'

如果规则匹配,则打印整行

 ./test

传递文件以进行操作。

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