如何使用 ksh 只输出 [az;AZ;0-9;|] 字符?

如何使用 ksh 只输出 [az;AZ;0-9;|] 字符?

我怎样才能“白名单”/仅输出(英语)az;AZ;0-9;| ksh/OpenBSD 5.3 中的字符和空格?

$ 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。

相关内容