O que você está procurando é chamado de mecanismo de modelo. Eu fiz extremly simple not reliable
one para você. É baseado em sed e provavelmente é extremamente frágil.
Observe que você tem <IP address2>10.30.123.30
em vez de <IP Address2>10.30.123.30
, então meu script não funcionou como esperado. O código completo está abaixo:
#!/usr/bin/env bash
cat <<EOF >file_1
<IP Address1>, 10, 23, <GW IP1>
FINAL INPUT.45.324
<IP Address2>, 40, 33, <GW IP2>
EOF
cat <<EOF >file_2
<IP Address1>10.155.120.20
<GW IP1>10.155.120.30
<IP Address2>10.30.123.30
<GW IP2>10.30.123.1
EOF
cp file_1 file_final
while read to_split; do
echo "to_split: $to_split"
arg1="${to_split%>*}>" # > because it is removed
arg2="${to_split#*>}"
echo "1: $arg1"
echo "2: $arg2"
sed -i "s/$arg1/$arg2/g" file_final
done < file_2
O script é autônomo para que você possa testá-lo sozinho:).
O problema é que não posso dizer que esta é uma ótima solução. A solução real seria usar o mecanismo de alguns templates como o Jinja2.