Использование sed в bash script для замены псевдонимов LaTeX

Я относительно новичок в bash-скриптинге и не имею опыта работы с LaTeX. Меня попросили разработать скрипт, который заменит удобные ярлыки в документах LaTeX на их более громоздкие эквиваленты в длинных формах.

о сих пор мой подход заключался в том, чтобы изолировать ярлык и длинную форму в отдельных переменных, а затем попытаться заменить их в тексте с помощью sed. Я приложил короткие примеры файлов ниже.

Поскольку в настоящее время сценарий принимает 2 аргумента, файл expr, из которого он извлекает ярлыки и терминологию длинных форм, и файл, в который предполагается внести соответствующие изменения. Я знаю, что скрипт правильно изолирует ярлыки и длинные формы и может их вернуть, но он не может выполнить команду sed.

Я пытался найти это в Интернете и нашел несколько похожих вопросов, где предполагалось, что у sed трудно распознать переменную и что различные типы комбинаций котировок могут решить проблему. Я перепробовал много перестановок, и ни одна из них не сработала. Во многих случаях термины длинной формы содержат специальные символы, такие как '!$3$!#39; и '{}', поэтому я подозреваю, что это может быть проблемой, но я не уверен. Я также очень открыт для других идей о том, как решить проблему. Ниже приведены примеры как скрипта, так и двух файлов аргументов, expr и infile.

expr файл, содержащий ярлыки и длинные формы

% 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, содержащий ярлыки для замены на длинные формы

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}

Соответствующий подраздел сценария, вызываемый с аргументами expr и infile

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}

ОБНОВЛЕНИЕ: для пояснения, это то, что было бы желаемым результатом, ярлыки, присутствующие в infile, будут заменены на соответствующие длинные формы

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

Ответы на вопрос(3)

Ваш ответ на вопрос