![ksh를 사용하여 [az;AZ;0-9;|] 문자만 출력하는 방법은 무엇입니까?](https://linux55.com/image/49339/ksh%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%5Baz%3BAZ%3B0-9%3B%7C%5D%20%EB%AC%B8%EC%9E%90%EB%A7%8C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.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입니다.