kshを使用して[az;AZ;0-9;|]文字のみを出力するには?

kshを使用して[az;AZ;0-9;|]文字のみを出力するには?

ksh/OpenBSD 5.3 で (英語) az;AZ;0-9;|文字とスペースのみ「ホワイトリスト」/出力するにはどうすればよいですか?

$ echo 'ASDF"`date`ew � kd A | A'
ASDF"`date`ew � kd A | A
$ echo 'ASDF"`date`ew � kd A | A' | MAGIC
ASDFdateew  kd A | A

だから尋ねる:魔法が必要です:)

修正する:

echo 'a|d' | LC_ALL=EN tr -dc '[:alnum:][:space:]|'
a|d

これはコンソールで動作しますが、CGIスクリプトに入れると次のように出力されます。

a7Cd

なぜ?

答え1

echo 'áé{D`AS' | LC_ALL=C tr -cd '[:alnum:]|'

(追加の改行文字も削除されることに注意してくださいecho。)

LC_ALL決定したロケールこれは、どの文字が何であるか、どの文字が文字または数字と見なされるかを決定します。 Cロケールでは、文字はシングルバイトalnumsASCII文字A〜Z、a〜z、および0〜9です。

関連情報