Utilizando sed en el script bash para reemplazar los alias LaTeX

Soy relativamente nuevo en bash scripting y no tengo experiencia con LaTeX. Me han pedido que desarrolle un script que reemplace los accesos directos convenientes en los documentos de LaTeX con sus equivalentes de formato largo más engorrosos.

Mi enfoque hasta ahora ha sido aislar tanto el atajo como el formato largo en variables separadas y luego tratar de reemplazarlos en el texto usando sed. He adjuntado archivos de ejemplo cortos a continuación.

Como es actualmente, el script toma 2 argumentos, un archivo expr del que recupera los accesos directos y la terminología de formato largo y un archivo en el que se supone que debe hacer los cambios apropiados. Sé que el script está aislando correctamente tanto los accesos directos como las formas largas y puede devolverlos, pero parece que no puede ejecutar el comando sed.

He intentado buscar esto en línea y encontré varias preguntas similares en las que la sugerencia era que sed tenía dificultades para reconocer variables y que varios tipos de combinaciones de citas podrían resolver el problema. He intentado muchas permutaciones y ninguna parece funcionar. Las terminologías de formato largo en muchos casos contienen caracteres especiales como '!$3$!#39; y '{}', por lo que sospecho que este podría ser el problema, pero no estoy seguro. También estoy muy abierto a otras ideas sobre cómo resolver el problema. A continuación, encontrará ejemplos de la secuencia de comandos y los 2 archivos de argumentos, expr e infile.

expr archivo que contiene accesos directos y formularios largos

% a
\newcommand{\ao}{$^{18}$O}
\newcommand{\aodso}{$^{18}$O/$^{16}$O}
% b
\newcommand{\bea}{\begin{equation}}
\newcommand{\beaa}{\begin{eqnarray}}
% c
\newcommand{\cthree}{C$_3$}
\newcommand{\cfour}{C$_4$}
\newcommand{\coz}{CO$_2$}

infile que contiene accesos directos para ser reemplazados por formularios largos

This is my test {\ao} 
{\aodso} my test is this
Does it work {\bea}
{\beaa} test test test
work work work {\cthree}
{\cfour} This is my test
my test is this {\coz}

Subsección relevante del script llamado con expr e infile como argumentos

while read line; do
    if [[ $line == \newcommand* ]]; then
    temp=${line#*\{}
    sc=${temp%%\}*} 
    templf=${temp#*\{}
    lf=${templf%\}}
    #echo $sc, $lf
    sed -i -e 's/${sc}/${lf}/g' ${infile}
    fi
done < ${expr}

ACTUALIZACIÓN: Para aclarar, este es el resultado deseado, los atajos presentes en el archivo se sustituirán por la forma larga apropiada

This is my test {$^{18}$O}
{$^{18}$O/$^{16}$O} my test is this
Does it work {\begin{equation}}
{\begin{eqnarray}} test test test
work work work {C$_3$}
{C$_4$} This is my test
my test is this {CO$_2$}

Respuestas a la pregunta(3)

Su respuesta a la pregunta