ファイルがあり、そのファイルに英語のASCII文字のみが含まれていることを確認したいと思います。
とてもよくある質問のようですが、グーグルをしてみると直接的な回答や関連内容がありませんでした。
他の質問によると、これはこれまでに得たものですが、うまくいきません。 ASCII 文字であるか非 ASCII 文字であるかに関係なく、常に非 ASCII 文字であると判断されます。
if (LC_ALL=C; [[ $TEXT = *[[:ascii:]]* ]]) then
echo "Contain Non-ASCII"
fi
ところで、これはシェルスクリプトです。
ベストアンサー1
コードは、変数値にTEXT
少なくとも1つのASCII文字が含まれているかどうかをテストします。 ASCII以外の文字が含まれているかどうかをテストするには、$TEXT
コレクションを逆にする必要があります。ところで、[:ascii:]
ロケールとは何の関係もないので設定する必要はありませんLC_CTYPE
。
if [[ $TEXT = *[![:ascii:]]* ]]; then
echo "Contain Non-ASCII"
fi
これは[:ascii:]
bash(およびzsh)機能です。スクリプトがkshまたは通常のshで動作するようにするには、ロケールを使用する必要があります。移植可能な方法は次のとおりです。
LC_CTYPE=C
case $TEXT in
*[![:cntrl:][:print:]]*) echo "Contain Non-ASCII";;
esac
ファイルの内容を確認するには、次のようにします。grep。
if LC_ALL=C grep -q '[^[:cntrl:][:print:]]' somefile; then
echo "Contain Non-ASCII"
fi