如何在文件中查找不可打印的字符?

时间:2014-09-08 08:51:24

标签: file grep find non-ascii-characters

我试图找出unix中数据文件中的不可打印字符。 代码:

#!/bin/ksh
export SRCFILE='/data/temp1.dat'
while read line 
do
len=lenght($line)
for( $i = 0; $i < $len; $i++ ) {

        if( ord(substr($line, $i, 1)) > 127 )
        {
            print "$line\n";
            last;
        }
done < $SRCFILE

代码无效,请帮我解决上述问题。

3 个答案:

答案 0 :(得分:6)

您可以使用grep在文件中查找不可打印的字符,如下所示,它会查找所有非可打印的ASCII和所有非ASCII:

grep -P -n "[\x00-\x1F\7F-\xFF]" input_file

-P为您提供更强大的Perl正则表达式(PCRE),-n显示行号。

如果您的grep不支持PCRE,我会直接使用Perl:

perl -ne '$x++;if($_=~/[\x00-\x1F\x7F-\xFF]/){print"$x:$_"}' input_file

答案 1 :(得分:0)

您可以尝试这样的事情:

grep '[^[:print:]]' filePath

答案 2 :(得分:0)

这听起来很陈旧,但是我不确定现在怎么做。 根据您的工作,我喜欢“ od”,您可能想要一些适合打印任意字符的东西。 awk代码不是很优雅,但是如果您要查找特定内容,它会很灵活,但是重点只是说明od的用法。注意awk比较和空格等问题,

cat filename | od -A n -t x1z | awk '{ p=0; i=1; if ( NF>16) { while (i<17) {if ( $i!="0d"){ if ( $i!="0a") {if ( $i" " < "20 " ) {print $i ; p=1;}  if ( $i" "> "7f "){print $i;   p=1;}}}  i=i+1} if (p==1) print $0; }}' | more