检查文件是否包含某些ASCII字符

时间:2015-08-10 14:36:18

标签: unix grep ascii

我需要一个unix命令来验证文件是否只有ASCII可打印字符(在ASCII Hex 20和7E之间)。

我得到以下命令来检查文件是否包含非ASCII字符,但无法弄清楚我的上述问题。

if LC_ALL=C grep -q '[^[:print:][:space:]]' file; then
    echo "file contains non-ascii characters"
else
    echo "file contains ascii characters only"
fi 

2 个答案:

答案 0 :(得分:3)

很高兴有: - 停止加载结果。有时一个就够了

要查找您可以使用的文件中的207E个字符:

grep -P "[\x20-\x7E]" file

请注意使用-P执行Perl正则表达式。

但在这种情况下,您要检查文件是否只包含这些字符。所以最好的办法是检查是否有任何不在此范围内的,即检查[^range]

grep -P "[^\x20-\x7E]" file

总之,我会说:

grep -qP "[^\x20-\x7E]" file && echo "weird ASCII" || echo "clean one"

答案 1 :(得分:0)

可以使用POSIX grep选项在 unix 中完成此操作:

if LC_ALL=C grep -q '[^ -~]' file; then
    echo "file contains non-ascii characters"
else
    echo "file contains ascii characters only"
fi

[ ... ]中的字符为^(插入符号),空格,-(ASCII减号),~(代字号) )。

您也可以指定ASCII标签。标准将这些称为collating elements。似乎\x(十六进制)或\0(八进制)都显示在bracket expressions的标准说明中(请参阅7.4.1)。因此,您可以使用\x09\011作为文字标签。

根据说明,默认-e接受basic regular expression(BRE)。如果添加了-E,则可以使用扩展正则表达式(但不需要)。