POSIX 운영 체제 간에 포팅하고 로케일을 지원하는 방법이 있습니까?변화명령줄의 텍스트 대소문자 구분 - 즉, 소문자를 대문자로 바꾸거나 그 반대로 바꿉니다.
사용암소 비슷한 일종의 영양sed에서는 다음을 사용할 수 있습니다.
echo 'Yes, I Know IT!' | sed -E 's/([[:upper:]]*)([[:lower:]]*)/\L\1\U\2/g'
yES, i kNOW it!
이는 악센트가 있는 문자와 잘 작동합니다.
echo Élève | sed -E 's/([[:upper:]]*)([[:lower:]]*)/\L\1\U\2/g'
éLÈVE
\L
그러나 GNU 확장을 사용하기 때문에 \U
이식성이 없습니다. 반면에 tr
내 Linux 시스템에서는 악센트 부호가 있는 문자가 올바르게 처리되지 않습니다.
echo 'Élève' | tr '[:lower:][:upper:]' '[:upper:][:lower:]'
ÉLèVE
해결책이 있나요?
답변1
을(를 ) 수락하면 perl
이 솔루션은 다음에서 직접 복사됩니다.Perl, tr 함수를 사용하여 대문자를 소문자로 또는 그 반대로 동시에 변환하시겠습니까?당신을 위해 일할 것입니다 :
echo 'Hello Élève. It is beautiful!' |
perl -Mopen=locale -Mutf8 -pe 's/([[:upper:]])|([[:lower:]])/defined $1 ? lc $1 : uc $2/eg'
hELLO éLÈVE. iT IS BEAUTIFUL!
( gsed ... || tr ... )
또한 GNU가 있는 시스템에서는 gsed
우선순위를 가지지만 다른 tr
시스템 에서는 그렇지 않도록 비슷한 것을 사용하는지 알고 싶습니다.아마도실행될 GNU가 아닙니다. (GNU POSIX가 아닌 경우 tr
분명히 멀티바이트 문자를 올바르게 처리합니다.)