Supondo que você queira eliminar todos os caracteres que são os mesmos nas duas strings, você pode fazer isso em duas chamadas para sed
:
#!/bin/sh
player1_word='hello'
player2_word='bxolq'
player1_short=$( printf '%s\n' "$player1_word" | sed "s/[$player2_word]//g" )
player2_short=$( printf '%s\n' "$player2_word" | sed "s/[$player1_word]//g" )
if [ "${#player1_short}" -gt "${#player2_short}" ]; then
printf 'Player1 wins with "%s" ("%s") over "%s" ("%s")\n' \
"$player1_word" "$player1_short" \
"$player2_word" "$player2_short"
elif [ "${#player2_short}" -gt "${#player1_short}" ]; then
printf 'Player2 wins with "%s" ("%s") over "%s" ("%s")\n' \
"$player2_word" "$player2_short" \
"$player1_word" "$player1_short"
else
printf 'It is a draw between "%s" ("%s") and "%s" ("%s")\n' \
"$player1_word" "$player1_short" \
"$player2_word" "$player2_short"
fi
A principal parte operacional deste script é
player1_short=$( printf '%s\n' "$player1_word" | sed "s/[$player2_word]//g" )
player2_short=$( printf '%s\n' "$player2_word" | sed "s/[$player1_word]//g" )
que define as duas variáveis _short
com o valor de cada variável _word
com as letras da outra variável _word
removida. Isso é feito usando uma das palavras em uma expressão entre colchetes ( [...]
) e fazendo uma substituição global sobre a outra palavra que remove cada caractere que corresponda a qualquer caractere na expressão [...]
.
Teste:
$ sh ./script.sh
Player2 wins with "bxolq" ("bxq") over "hello" ("he")