我试图找出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
代码无效,请帮我解决上述问题。
答案 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