내 질문은 어떻게 모든 텍스트를 대문자에서 소문자로 또는 그 반대로 변환 할 수 있습니까? 그것은 모든 문자의 경우를 변경하는 것입니다. 그것은으로 수행되어야 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에서는 제한이 있습니다. tr
Linux 기반 시스템에서 일반적으로 발견 되는 3 가지 구현 중 :
- GNU
tr
에서는 단일 바이트 문자 세트에만 작동합니다. 예를 들어Stéphane Chazelas
UTF-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]}}
답변
이것은 tr
Sté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:]