![kshを使用して[az;AZ;0-9;|]文字のみを出力するには?](https://linux33.com/image/49339/ksh%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%5Baz%3BAZ%3B0-9%3B%7C%5D%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F.png)
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ロケールでは、文字はシングルバイトalnums
ASCII文字A〜Z、a〜z、および0〜9です。