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


8

我想换一个字符串的第n个字母的大小写BASH(或任何其他的* nix工具,例如sedawktr等)。

我知道您可以使用以下命令将整个字符串更改为大小写:

${str,,} # to lowercase
${str^^} # to uppercase

是否可以将“测试”的第三个字母的大小写更改为大写?

$ export str="Test"
$ echo ${str^^:3}
TeSt

Answers:


5

在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

1
什么是目的~perl解决方案?
cuonglm 2014年

@cuonglm错字了。它是我以前尝试使用$ARGV[0]=~而不是的以前版本遗留下来的<<<$str。谢谢。
terdon

2
bash可以与被缩短foo=${str:2}并且${foo^},其中只有大写字符串中的第一个字符。
chepner 2014年

7

使用GNU sed(可能是其他人)

sed 's/./\U&/3' <<< "$str"

awk

awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"

1

另一个perl

$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
  • 一般形式为substr($_,n,1)这里n是要反转的情况下(基于0的索引)字母的位置。

  • 当对带有空格的ASCII字符进行异或运算时,将其大小写反转。


真的很酷,我不知道用空格对ascii字符进行异或运算会反过来。
ryanmjacobs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.