BASH
sed
문자열(또는 , , awk
등과 같은 다른 *nix 도구 ) tr
에서 문자열의 n번째 문자의 대소문자를 변경하고 싶습니다.
다음을 사용하여 전체 문자열의 대소문자를 변경할 수 있다는 것을 알고 있습니다.
${str,,} # to lowercase
${str^^} # to uppercase
"Test" 세 번째 글자의 대소문자를 대문자로 변경할 수 있나요?
$ 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하면 대소문자가 반대가 됩니다.