Używanie sed w skrypcie bash do zastępowania aliasów LaTeX

Jestem stosunkowo nowym użytkownikiem skryptów bash i nie mam doświadczenia z LaTeX. Poproszono mnie o opracowanie skryptu, który zastąpi skróty wygody w dokumentach LaTeX ich bardziej uciążliwymi odpowiednikami o długiej formie.

Moje podejście do tej pory polegało na wyodrębnieniu zarówno skrótu, jak i długiej formy w osobnych zmiennych, a następnie próby zastąpienia ich w tekście za pomocą sed. Poniżej załączam krótkie przykładowe pliki.

Ponieważ obecnie skrypt przyjmuje 2 argumenty, plik expr, z którego pobiera skróty i terminologię o długiej formie, a plik infile, do którego należy wprowadzić odpowiednie zmiany. Wiem, że skrypt właściwie izoluje zarówno skróty, jak i długie formy i może je zwrócić, ale wydaje się, że nie może wykonać polecenia sed.

Próbowałem przeszukać to online i znalazłem wiele podobnych pytań, w których sugerowano, że sed z trudem rozpoznaje zmienną i że różne kombinacje cytatów mogą rozwiązać problem. Próbowałem wielu permutacji i żadna z nich nie działa. Długie formy terminologii w wielu przypadkach zawierają znaki specjalne, takie jak „!$3$!#8221; i „{}”, więc podejrzewam, że to może być problem, ale nie jestem pewien. Jestem również bardzo otwarty na inne pomysły dotyczące rozwiązania problemu. Poniżej znajdują się przykłady zarówno skryptu, jak i 2 plików argumentów, expr i infile.

lik @expr zawierający skróty i długie formularze

% 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 zawierający skróty, które należy zastąpić długimi formularzami

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}

Odpowiedni podsekcja skryptu wywołana z wyrażem i infilem jako argumenty

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}

UPDATE: Dla wyjaśnienia, to byłby pożądany wynik, skróty obecne w infile zostaną zastąpione odpowiednią długą formą

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$}

questionAnswers(3)

yourAnswerToTheQuestion