대문자 문자열을 소문자로 또는 그 반대로 변환하기 위해 사용할 수있는 Bash 명령은 무엇입니까?
감사합니다.
대문자 문자열을 소문자로 또는 그 반대로 변환하기 위해 사용할 수있는 Bash 명령은 무엇입니까?
감사합니다.
답변:
문자열이 변수에 이미 저장되어 있으면 bash
변수 확장 ${parameter,,pattern}
(bash 4.0부터 사용 가능)을 사용할 수 있습니다. 여기서 parameter
변수의 이름 pattern
은 생략됩니다.
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
변수의 값은 변경되지 않고 출력 만 변경됩니다. 변수를 변경하려면 새 값을 지정해야합니다.
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
대문자 변환은 다음과 함께 작동합니다 ${parameter^^pattern}
.
$ echo ${string^^}
HELLO, WORLD!
이것은 유니 코드 문자열에서도 작동합니다 (적어도 현재 bash 버전에서는 bash 4.3 이상이 필요합니다).
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
당신이 사용하는 경우 zsh
, 당신이 사용할 수있는 매개 변수 확장 플래그 ( ${(FLAGS)NAME}
동일한 결과를 달성하기 위해, zsh을 2.5부터 사용 가능)을. bash
구문은 작동하지 않습니다 zsh
) 1 . 소문자 플래그는 L
; 대문자의 경우 U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
이것은 유니 코드 문자열에서도 작동합니다 (적어도 zsh 5.0부터; 이전 버전에서는 시도하지 않았습니다).
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1) 비록 zsh가이 기능을 훨씬 더 오래 사용한다는 것을 알면 아마도 " zsh
구문은 작동하지 않습니다bash
.
${string,,}
표기법은 bash 버전 4 이상에서만 존재합니다. 그렇지 않으면와 같은 다른 솔루션 중 하나가 필요합니다 $(echo $string | tr '[:upper:]' '[:lower:]')
.
유니 코드에서 올바르게 작동하는 방법은 거의 없습니다.
GNU sed 4.2.2 작동 :
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
bash 4.2.45 선언이 작동 하지 않습니다 .
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
bash 4.2.45 매개 변수 확장이 작동 하지 않습니다 .
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
및 매개 변수 확장 작업 :
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU tr 8.20이 작동 하지 않습니다 :
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk (Ubuntu 13.10의 기본 awk)가 작동 하지 않습니다 .
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
gawk 작품 :
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl pure uc ()가 작동 하지 않습니다 :
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
유니 코드 힌트가 없는 Python 2는 작동 하지 않습니다 .
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
유니 코드 작동 을 다루라는 지시가있는 파이썬 2 :
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
파이썬 3 작동 :
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
gawk
기본 awk로 표시됩니다 (와 같이 표시 update-alternatives --display awk
). mawk
13.10의 기본값 이 확실 합니까?
sed
1990 년부터 \U
;-) 옵션 을 지원했습니다 . 딱딱한 기능이 아닙니다. 그렇지 않으면, 큰 대답, 많은 옵션, 너무 적은 시간 ;-) 모두에게 행운을 빕니다!
uc
사용해야하기 때문에 Perl에서 지갑 이 작동하지 않습니다 . 예제를 다시 작성 하면 작동합니다. stackoverflow.com/a/13261662/3701431 참조 use Encode
use utf8
echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
bash 내부 조판 또는 선언 명령을 사용하여 소문자 변수를 정의합니다.
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
변수를 입력 할 때가 아니라 값을 설정하면 문자가 낮아집니다. 따라서 스크립트 시작 부분에 조판하는 것이 좋습니다. 대문자의 경우 -u 를 입력 할 수 있습니다 .
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
이것은 bash 쉘에만 국한되지 않으며 ksh에서도 작동하며 POSIX 쉘 정의에서도 가능합니다.
편집 : 많은 사람들이 조판 이 bash에서 더 이상 사용되지 않고 선언으로 대체 된다는 사실을 부드럽게 지적 했습니다 . 두 명령 모두 동일합니다.
$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
Set variable values and attributes.
Obsolete. See `help declare'.
$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
Set variable values and attributes.
이기종 환경에서 작업 할 때는 여전히 typeset 구문을 사용하므로 스크립트를 다시 작성할 필요가 없습니다.
typeset
의해 depricated 대체 간주됩니다declare
tr
명령으로 할 수 있습니다 .
터미널에서 ( Ctrl+ Alt+ T)
이 명령은
echo 'String here' | tr "[:lower:]" "[:upper:]"
소문자를 대문자로 변환합니다.
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
대문자를 소문자로 변환합니다.
예:
신용은 사이버 시티 로 간다
tr A-Z a-z
작동합니다.
이 간단한 명령을 사용하십시오. 대문자에서 소문자로 'f'는 변환하려는 파일 이름입니다.
tr "A-Z" "a-z" < f
소문자에서 대문자로
tr "a-z" "A-Z" < f