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

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

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하면 대소문자가 반전됩니다.

관련 정보