检查文件是否包含某些 ASCII 字符
Check if a file contains certain ASCII characters
我需要一个 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
很高兴拥有:
- 停止加载结果。有时候一个就够了
要在文件中查找 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"
这可以在 unix 中使用 POSIX grep 选项完成:
if LC_ALL=C grep -q '[^ -~]' file; then
echo "file contains non-ascii characters"
else
echo "file contains ascii characters only"
fi
其中 [
... ]
中的字符是 ^
(插入符号)、space、-
(ASCII 减号)、~
(波浪号)。
您也可以指定 ASCII 制表符。该标准将这些称为 collating elements. It seems that both \x
(hexadecimal) or [=17=]
(octal) are shown in the standard description of bracket expressions (see 7.4.1)。因此,您可以使用 \x09
或 1
作为文字选项卡。
根据描述,默认情况下 -e
接受 basic regular expression (BRE)。如果你添加了一个 -E
,你可以有一个扩展的正则表达式(但这不是必需的)。
我需要一个 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
很高兴拥有: - 停止加载结果。有时候一个就够了
要在文件中查找 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"
这可以在 unix 中使用 POSIX grep 选项完成:
if LC_ALL=C grep -q '[^ -~]' file; then
echo "file contains non-ascii characters"
else
echo "file contains ascii characters only"
fi
其中 [
... ]
中的字符是 ^
(插入符号)、space、-
(ASCII 减号)、~
(波浪号)。
您也可以指定 ASCII 制表符。该标准将这些称为 collating elements. It seems that both \x
(hexadecimal) or [=17=]
(octal) are shown in the standard description of bracket expressions (see 7.4.1)。因此,您可以使用 \x09
或 1
作为文字选项卡。
根据描述,默认情况下 -e
接受 basic regular expression (BRE)。如果你添加了一个 -E
,你可以有一个扩展的正则表达式(但这不是必需的)。