Isso localizará e realizará a troca conforme você está perguntando:
$ perl -lpe 's/\. (\cite.*)/$1./' afile
\cite{poelma20113d}.
Para que o liner faça a alteração real no arquivo:
$ perl -i.bak -lpe 's/\. (\cite.*)/$1./' afile
Isso manterá o arquivo original em afile.bak . Se você quiser abrir mão dos arquivos .bak criados, poderá informar perl para não fazer isso omitindo qualquer argumento para a opção -i :
$ perl -i -lpe 's/\. (\cite.*)/$1./' afile
Como funciona
Os exemplos acima procuram os seguintes bits dentro de cada string do arquivo afile .
-
\.- procura por um literal . . -
s/.../../- procura por um padrão e o substitui por outro padrão. -
(\cite.*)- procura o padrão de um literal \ seguido pela stringcite, seguido por qualquer outra coisa. Tudo isso é salvo em uma variável,$1porque está envolto em parens (ou seja, (....) ). Nota :(\cite.*})será interrompido quando atingir a chave direita}. Dessa forma, a próxima sentença após o comandoLaTeX\cite{}, por exemplo, em. \cite{poelma20113d} This is the next sentence., será processada corretamente. -
$1.-$1é o que combinamos nos parênteses, então colocamos isso seguido por um . .