![如何使用 ksh 只输出 [az;AZ;0-9;|] 字符?](https://linux22.com/image/49339/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ksh%20%E5%8F%AA%E8%BE%93%E5%87%BA%20%5Baz%3BAZ%3B0-9%3B%7C%5D%20%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我怎样才能“白名单”/仅输出(英语)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。