태그 보관물: sed

sed

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

내 질문은 어떻게 모든 텍스트를 대문자에서 소문자로 또는 그 반대로 변환 할 수 있습니까? 그것은 모든 문자의 경우를 변경하는 것입니다. 그것은으로 수행되어야 sed어떻게 든 교체.



답변

여기에 똑 바른 방법이 있습니다 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'
ΑβΓ


답변

POSIXly, @cuonglm이 표시 한대로sed 음역하려는 전체 문자 세트를 제공하는 것 외에는 이를 수행 할 수 없습니다 .

그것은 함께 할 수 tr있지만, 어떤이의 tr(음역)입니다 :

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

그러나 Linux에서는 제한이 있습니다. trLinux 기반 시스템에서 일반적으로 발견 되는 3 가지 구현 중 :

  • GNU tr에서는 단일 바이트 문자 세트에만 작동합니다. 예를 들어 Stéphane ChazelasUTF-8 로케일에서 sTéPHANE cHAZELAS대신 대신 제공 합니다 sTÉPHANE cHAZELAS. 그것은 GNU의 알려진 제한 사항입니다 tr.
  • 함께 tr작업을하지 않는 가보 toolchest을에서 (당신이 얻을 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]}}


답변

이것은 trStéphane Chazelas가 제공 하는 솔루션 과 동일한 제한 사항을 가지고 있지만 다른 방법입니다.

{   echo QWERTYqwerty | dd conv=lcase
    echo QWERTYqwerty | dd conv=ucase
} 2>/dev/null

산출

qwertyqwerty
QWERTYQWERTY

나는 덤프 stderr/dev/null있기 때문에이 dd또한 모든 조작으로 통계를 제공하는 2파일 기술자를. 이것은 수행중인 작업에 따라 유용 할 수 있지만이 데모에는 적합하지 않습니다. dd예를 들어 다음 과 같은 다른 모든 작업이 여전히 적용됩니다.

echo QWERTYqwerty | dd bs=1 cbs=6 conv=unblock,ucase 2>/dev/null

산출:

QWERTY
QWERTY


답변

주요 목표가 파일을 하위 클래스에서 상위 클래스로 변환하는 것이라면 파일을 사용 tr하고 STDOUT변환 하지 않는 이유는 무엇입니까?

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

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


답변

사용하여 awk:

awk '{print tolower($0)}' file.txt | tee file.txt


답변

ruby 명령 줄과 비슷한 사용법을위한 문자열 메서드가 있습니다. perl

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

참조 루비 문서 인코딩

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


답변

간단한 것을 단순하게 유지하십시오. 문자를 번역하도록 설계된 필터는 tr입니다.

echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]