我需要一个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
答案 0 :(得分:3)
要查找您可以使用的文件中的20
到7E
个字符:
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
,则可以使用扩展正则表达式(但不需要)。