Ändern Sie die Groß-/Kleinschreibung des n-ten Buchstabens in einer Zeichenfolge

Ändern Sie die Groß-/Kleinschreibung des n-ten Buchstabens in einer Zeichenfolge

Ich möchte die Groß-/Kleinschreibung des n-ten Buchstabens einer Zeichenfolge in BASH(oder anderen *nix-Tools, z. B. sed, awk, tr, usw.) ändern.

Ich weiß, dass Sie die Groß-/Kleinschreibung einer ganzen Zeichenfolge ändern können, indem Sie Folgendes verwenden:

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

Ist es möglich, die Groß-/Kleinschreibung des 3. Buchstabens von „Test“ in einen Großbuchstaben zu ändern?

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

Antwort1

In Bash könnten Sie Folgendes tun:

$ 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

In Perl:

$ perl -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh

Oder

$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh

Antwort2

Mit GNU sed(möglicherweise anderen)

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

Mitawk

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

Antwort3

Ein anderer perl:

$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
  • Die allgemeine Form ist „ substr($_,n,1), wobei ndie Position des Buchstabens ist, dessen Groß-/Kleinschreibung Sie umkehren möchten (Index mit Nullbasis).

  • Wenn Sie ein ASCII-Zeichen mit einem Leerzeichen xornen, kehren Sie die Groß-/Kleinschreibung um.

verwandte Informationen