sando o script sed no bash para substituir os aliases do LaT
Sou relativamente novo no bash scripting e não tenho experiência com o LaTeX. Foi-me pedido que desenvolva um script que substitua os atalhos de conveniência nos documentos do LaTeX pelos seus equivalentes de formato longo mais pesado
minha abordagem até agora foi isolar o atalho e o formato longo em variáveis separadas e, em seguida, tentar substituí-los no texto usando sed. Anexei pequenos arquivos de exemplo abaixo.
Como atualmente o script usa 2 argumentos, um arquivo expr do qual recupera os atalhos e a terminologia de formato longo e um infile no qual é suposto fazer as alterações apropriadas. Eu sei que o script está isolando adequadamente os atalhos e os formulários longos e pode devolvê-los, mas parece que não consegue executar o comando se
Tentei pesquisar on-line e encontrei várias perguntas semelhantes, onde a sugestão era que o sed dificilmente reconhece a variável e que vários tipos de combinações de cotações podem resolver o problema. Eu tentei muitas permutações e nenhuma parece funcionar. As terminologias de formato longo, em muitos casos, contêm caracteres especiais como '!$3$!#39; e '{}'; portanto, suspeito que esse seja o problema, mas não tenho certeza. Também estou muito aberto a outras idéias sobre como resolver o problema. Encontre abaixo exemplos de arquivos de script e 2 argumentos, expr e infile.
rquivo @expr contendo atalhos e formulários longos
% 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$}
arquivo contendo atalhos a serem substituídos por formulários longos
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}
ubseção relevante de script chamada com expr e infile como argumento
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: Para esclarecimento, é esse o resultado desejado, os atalhos presentes no infile seriam substituídos pelo formato longo apropriado
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$}