更改字符串中第 n 个字母的大小写

更改字符串中第 n 个字母的大小写

BASH我想更改(或任何其他 *nix 工具,例如sedawktr等)中字符串的第 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 中:

$ 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
  • 一般形式是substr($_,n,1)wheren是要反转大小写的字母位置(从 0 开始的索引)。

  • 当对 ASCII 字符与空格进行异或时,会反转其大小写。

相关内容