
BASH
(또는 다른 *nix 도구(예 sed
: awk
, tr
, 등)) 에서 문자열의 n번째 문자의 대소문자를 변경하고 싶습니다 .
다음을 사용하여 전체 문자열의 대소문자를 변경할 수 있다는 것을 알고 있습니다.
${str,,} # to lowercase
${str^^} # to uppercase
"Test" 3번째 글자의 대소문자를 대문자로 변경할 수 있나요?
$ export str="Test"
$ echo ${str^^:3}
TeSt
답변1
Bash에서는 다음을 수행할 수 있습니다.
$ str="abcdefgh"
$ foo=${str:2} # from the 3rd letter to the end
echo ${str:0:2}${foo^} # take the first three letters from str and capitalize the first letter in foo.
abCdefgh
펄에서는:
$ perl -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh
또는
$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh
답변2
GNU 사용 sed
(다른 사람도 가능)
sed 's/./\U&/3' <<< "$str"
와 함께awk
awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"
답변3
또 다른 perl
:
$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
일반적인 형태는 대소문자를 반전시키려는 문자의 위치(0부터 시작하는 인덱스)입니다
substr($_,n,1)
.n
ASCII 문자와 공백을 xor하면 대소문자가 반전됩니다.