ファイルがあります。英語のASCII文字のみが含まれているかどうかを確認します。
これは非常に一般的な質問だと思いましたが、グーグルで検索すると、直接の回答や関連する質問はありません。
他のいくつかの質問によると、これは私がこれまでに得たものですが、これは機能しません。 ASCIIまたはNon-ASCII文字のいずれであっても、常に非ASCIIとして決定されます。
if (LC_ALL=C; [[ $TEXT = *[[:ascii:]]* ]]) then
echo "Contain Non-ASCII"
fi
ところで、これはシェルスクリプトです。
コードは、変数TEXT
の値に少なくとも1つのASCII文字が含まれているかどうかをテストします。$TEXT
に非ASCII文字が含まれているかどうかをテストする場合は、ちなみに、[: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
file
コマンドは、ファイルのタイプ(ASCII、Unicode、バイナリなど)を通知します。
$ file my_file.txt
my_file.txt: ASCII text
したがって、出力に「ASCII」という単語が含まれていることを確認するだけで、これが機能するはずです。
if [[ file my_file.txt | grep -i ascii ]] ...