모든 텍스트를 대문자에서 소문자로 또는 그 반대로 변환하시겠습니까?

모든 텍스트를 대문자에서 소문자로 또는 그 반대로 변환하시겠습니까?

내 질문은 모든 텍스트를 대문자에서 소문자로 또는 그 반대로 변환하는 방법입니다. 즉, 모든 문자의 대소문자를 변경합니다. 어떻게든 대체를 통해 이루어져야 합니다 sed.

답변1

간단한 접근 방식은 다음과 같습니다 sed.

$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'
QwErTy

또는 sed소문자 <-> 대문자 변환이 존재하는 로케일의 모든 문자를 처리하는 GNU의 더 짧은 방법을 사용하십시오.

$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g'
QwErTy

다음과 같은 다른 도구를 사용할 수 있는 경우:

perl(ASCII 문자만 해당):

$ echo qWeRtY | perl -pe 'y/[a-z][A-Z]/[A-Z][a-z]/'
QwErTy

perl(더 일반적):

$ echo 'αΒγ' | perl -Mopen=locale -pe 's/(\p{Ll})|(\p{Lu})/uc($1).lc($2)/ge'
ΑβΓ

답변2

sedPOSIXly, 음역하려는 전체 문자 세트를 제공하지 않으면 이 작업을 수행할 수 없습니다.@cuonglm님이 보여주셨어요.

하지만 그것은 가능합니다 tr. 그리고 여기 있습니다 tr(음역):

tr '[:lower:][:upper:]' '[:upper:][:lower:]'

그러나 Linux에서는 제한이 있습니다. trLinux 기반 시스템의 세 가지 일반적인 구현 중:

  • GNU의 경우 tr단일 바이트 문자 집합에서만 작동합니다. 예를 들어, Stéphane ChazelasUTF-8 로케일에서는 sTéPHANE cHAZELASno 를 제공합니다 sTÉPHANE cHAZELAS. 이는 GNU의 알려진 제한 사항입니다 tr.
  • Heirloom Toolbox 에서는 tr이것이 작동하지 않습니다 stéphane chazelas.
  • busybox는 이것을 하지 않습니다 tr.

하지만 FreeBSD에서는 잘 작동합니다. 인증된 Unix 시스템에서도 제대로 작동할 것으로 예상할 수 있습니다.


셸에는 bash다음과 같은 전용 연산자가 있습니다.

in=AbCdE
out=${in~~}

그리고 zsh -o extendedglob:

out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}

답변3

주요 목표가 하위 클래스의 파일을 상위 클래스로 변환하는 것이라면 파일을 변환하는 데 tr및 를 사용하는 것은 어떨까요?STDOUT

$cat FILENAME | tr a-z A-Z > FILENAME2

FILENAME원본 파일은 어디에 있나요? FILENAME2변환된 출력 파일은 어디에 있습니까?

답변4

ruby명령줄 사용법과 유사한 문자열 방법이 있습니다.perl

$ echo 'qWeRtY' | ruby -pe '$_.swapcase!'
QwErTy

당신은 또한 볼 수 있습니다Ruby-doc 인코딩

$ ruby -e 'puts Encoding.default_external'
UTF-8
$ echo 'αΒγ'  | ruby -pe '$_.swapcase!'
ΑβΓ

관련 정보