문자열에서 n번째 문자의 대소문자 변경

문자열에서 n번째 문자의 대소문자 변경

BASHsed문자열(또는 , , 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하면 대소문자가 반대가 됩니다.

관련 정보