Você pode usar sed, combinar as partes antes e depois da linha e colocar um .
no meio. O comando s/REGEXP/REPLACEMENT/
executa uma substituição de expressão regular. \(…\)
delimita um grupo; e
no texto de substituição referem-se a esses grupos.
sed <original.tex >replaced.tex \
-e 's/^\(\section\*{[0-9]*\.[0-9]*\)\(}\)$/./' \
-e 's/^\(\addcontentsline{toc}{section}{[0-9]*\.[0-9]*\)\(}\)$/./'
Outra maneira de usar o sed é substituir o último }
por .}
se a linha corresponder ao padrão desejado:
sed <original.tex >replaced.tex \
-e '/^\section\*{[0-9]*\.[0-9]*}\)$/ s/}$/.&/' \
-e '/^\addcontentsline{toc}{section}{[0-9]*\.[0-9]*}/ s/}$/.&/'
Você também pode usar \|
para combinar dois padrões, mas neste caso eu acho que isso torna o código mais curto, mas menos claro.
Se você quiser substituir o arquivo, no Linux, você pode usar
sed -i -e … somefile.tex