Pode ser feito com sed ou usando apenas ferramentas bash.
Solução clássica do bash:
var="$(cat file.txt)";while read -r id name;do var="${var//@$id/$name}";done<mapfile.txt;echo "$var"
Você pode acrescentar >newfile.txt
ao último comando para enviar o texto final em um novo arquivo.
Solução de sed com alterações de escrita no mesmo arquivo:
while read -r id name;do sed -i "s/\@$id/$name/g" textfile.txt;done<mapfile.txt
Esta solução pode ser mais lenta se o arquivo de mapeamento / arquivo de texto for muito grande, já que o aplicativo externo sed é chamado para cada entrada encontrada armazenada no arquivo de mapeamento.
Ambas as soluções funcionam bem com sua amostra.
$ cat b.txt
<@U39RFF91U> for all the help in this project!
Thanks for your help to enhance the data quality <@U2UNRTLBV> <@U39RFF91U> <@U2UQCN023>!
$ cat c.txt
U39RFF91U Person1
U2UNRTLBV Person2
$ var="$(cat b.txt)";while read -r id name;do var="${var//@$id/$name}";done<c.txt #Batch Solution
$ echo "$var"
<Person1> for all the help in this project!
Thanks for your help to enhance the data quality <Person2> <Person1> <@U2UQCN023>!
$ while read -r id name;do sed -i "s/\@$id/$name/g" b.txt;done<c.txt #SED solution
$ cat b.txt
<Person1> for all the help in this project!
Thanks for your help to enhance the data quality <Person2> <Person1> <@U2UQCN023>!