2009-12-16 8 views
2

로케일 인식 대문자 작업을 수행하는 방법은 무엇입니까?Bash에서 로케일 인식 대문자?

표준 TR '[: 낮은 :]' '[: 상단 :]'트릭이 작동하지 않습니다

=$ echo żółw | tr "[:lower:]" "[:upper:]" 
żółW 

차라리하는 것을 피하기 것 (이 ŻÓŁW해야한다) Perl이나 그와 같은 무거운 것을 실행하십시오.

+0

이 "bash는"에 대한 없습니다. – unwind

답변

1

그것은 그 진정한 일반적인 솔루션에 대한 성공할 가망의 제공, 당신은 헤비급을 피하려는 경우 문자를 직접 제공해야 거라고 나에게 것, 그리고, 당신은 헤비급를 사용하여 붙어있다. 각 문자를

[email protected]:~$ echo żół | tr "[żół]" "[ŻÓŁ]" 
ŻÓŁ 

편집을 지정 요구

한 헤비급 솔루션

[email protected]:~$ more t.py 
# coding: UTF-8 
print unicode.upper("żółw".decode('utf-8')) 
[email protected]:~$ python t.py 
ŻÓŁW 

비 헤비급 솔루션 : 다른 답변과 의견을 바탕으로, BASH 4.0 로케일 민감하고 인식 와이드 문자. BASH가 무엇을해야하는지 알 수 있도록 적절한 로케일 (LC_CTYPE 또는 LC_ALL)을 설정해야합니다. 또한 로케일 민감한 버전의 늦은 (예를 들어, Mac OSX 10.6)

+0

잘 - 파이썬은 내가 피하고 싶은 것들의 범위에 있습니다. 너무 무거워. 각 문자를 지정하는 것과 마찬가지로 "żółw"는 단순하지만 일반적으로 일반적으로 작동시키는 것은 사실상 불가능합니다. –

+0

네, 그게 제가 첫 번째 단락에서 말한 것입니다. 내가 아는 한 멀리 찾을 수있는 한, tr의 유니 코드 인식 버전이 없으며 BASH도 와이드 문자를 인식하지 못합니다. –

+0

실제로, OS X와 ​​아마 FreeBSD에서 tr *은 로케일을 인식하고 OP의 예제가 작동합니다. –

2

bash가 충분히 새로운 경우, 그것을 할 수 있습니다 (bash-4.0 NEWS item 1.hh. 참조) 수 있습니다.

bash -c 'foo="żółw"; echo ${foo^^}' 

zsh을 너무 (4.3.3 이후는?) : 당신은 그럴 필요를 실행하는 경우

zsh -c 'foo="żółw"; echo ${(U)foo}' 
+0

당신은 아마 (-a 로케일'볼 적어도 UTF-8 변화에 LC_CTYPE을 설정해야합니다 또한 당신의 로케일 설정은 무엇입니까 4.0.35 :( –

+1

광산은 4.0.35입니다 떠들썩한 파티에 나를 위해 작동하지 않습니다 | 주 : fgrep UTF는-8').'경우 locale'는 모든 것이'C'는, 그것은 작동하지 않습니다보고합니다. 내 LC_CTYPE은'은 en_US.UTF-8'이다. –