!/bin/bash
set -- tomfoolery FoO bar # simulated command line arguments to make it run here
#input/output strings
input=$1 #tomfoolery
d=$2 #FOo;
e=$3 #bar;
# turn strings into character-arrays
D=($(echo "$d" |grep -o .))
E=($(echo "$e" |grep -o .))
# define output as empty
o=""
# permutate over the individual characters of 'd' and set the case of the corresponding character in 'e'
for i in $(seq 0 $((${#D[@]}-1)) );do
printf '%s' "${D[i]} --> "; # for debugging only
if [[ $(echo "${D[i]}" |grep -c '[A-Z]') -eq 1 ]]; then
echo "${E[i]}" |tr '[:lower:]' '[:upper:]'; # for debugging only
o=${o}$(echo "${E[i]}" |tr '[:lower:]' '[:upper:]');
else
echo "${E[i]}"; # for debugging only
o=${o}"${E[i]}";
fi;
done
echo "$o" # for debugging only
echo "$input" |sed "s@$d@$o@i"
IS9iaW4vYmFzaAoKc2V0IC0tIHRvbWZvb2xlcnkgRm9PIGJhciAjIHNpbXVsYXRlZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIG1ha2UgaXQgcnVuIGhlcmUKCiNpbnB1dC9vdXRwdXQgc3RyaW5ncwppbnB1dD0kMSAjdG9tZm9vbGVyeQpkPSQyICNGT287CmU9JDMgI2JhcjsKIyB0dXJuIHN0cmluZ3MgaW50byBjaGFyYWN0ZXItYXJyYXlzCkQ9KCQoZWNobyAiJGQiIHxncmVwIC1vIC4pKQpFPSgkKGVjaG8gIiRlIiB8Z3JlcCAtbyAuKSkKIyBkZWZpbmUgb3V0cHV0IGFzIGVtcHR5Cm89IiIKIyBwZXJtdXRhdGUgb3ZlciB0aGUgaW5kaXZpZHVhbCBjaGFyYWN0ZXJzIG9mICdkJyBhbmQgc2V0IHRoZSBjYXNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpbiAnZScKZm9yIGkgaW4gJChzZXEgMCAkKCgkeyNEW0BdfS0xKSkgKTtkbwogIHByaW50ZiAnJXMnICIke0RbaV19IC0tPiAiOyAjIGZvciBkZWJ1Z2dpbmcgb25seQogIGlmIFtbICQoZWNobyAiJHtEW2ldfSIgfGdyZXAgLWMgJ1tBLVpdJykgLWVxIDEgXV07IHRoZW4KICAgIGVjaG8gIiR7RVtpXX0iIHx0ciAnWzpsb3dlcjpdJyAnWzp1cHBlcjpdJzsgIyBmb3IgZGVidWdnaW5nIG9ubHkKICAgIG89JHtvfSQoZWNobyAiJHtFW2ldfSIgfHRyICdbOmxvd2VyOl0nICdbOnVwcGVyOl0nKTsKICBlbHNlCiAgICBlY2hvICIke0VbaV19IjsgIyBmb3IgZGVidWdnaW5nIG9ubHkKICAgIG89JHtvfSIke0VbaV19IjsKICBmaTsKZG9uZQplY2hvICIkbyIgIyBmb3IgZGVidWdnaW5nIG9ubHkKZWNobyAiJGlucHV0IiB8c2VkICJzQCRkQCRvQGkiCg==