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입니다.

관련 정보