
Wie suche und ersetze ich auf diese Weise mit sed oder einem anderen Tool
FOO => BAR
Foo => Bar
foo => bar
Das heißt: Suchen Sie unabhängig von der Groß-/Kleinschreibung nach „foo“, und ersetzen Sie es durch das gleiche Muster für Groß-/Kleinschreibung.
Eine „Lösung“ besteht darin, sed einmal für jedes Case-Sensitive-Muster auszuführen, aber das macht mehr Arbeit.
Antwort1
#!/bin/bash
S="NewYorkCity" # search string
R="minneapolis" # replace template (in lowercase)
declare -u T # -u: automatic convert content to upper case
for ((I=0; I<${#S}; I++)); do # loop over each single letter of $S
if [[ "${S:$I:1}" =~ [A-Z] ]]; then # upper case?
T="${R:$I:1}" # copy single letter to $T (convert to upper case)
echo -n "$T" # print single upper case letter without linefeed
else
echo -n "${R:$I:1}" # print single letter unaltered without linefeed
fi
done
Ausgabe:
MinNeapOlis
Gleicher Code, kompakter:
A="NewYorkCity" # search
B="minneapolis" # replace (must be in lowercase)
declare -u X
for ((I=0; I<${#A}; I++)); do if [[ "${A:$I:1}" =~ [A-Z] ]]; then X="${B:$I:1}"; echo -n "$X"; else echo -n "${B:$I:1}"; fi; done