我有一个 LaTeX 文档,其中有以下形式的行
\section*{3.1}
\addcontentsline{toc}{section}{3.1}
或一般情况下
\section*{x.y}
\addcontentsline{toc}{section}{x.y}
对于 x 介于 1 和 31 之间且 y 介于 1 和 12 之间(含 1 和 12)(日期)。我想将这些行更改为形式
\section*{x.y.}
\addcontentsline{toc}{section}{x.y.}
有一些简单的脚本可以做到这一点吗?
答案1
您可以使用 sed,匹配该行的前后部分并.
在中间放置一个。该命令执行正则表达式替换。界定一个组;并在替换文本中引用这些组。s/REGEXP/REPLACEMENT/
\(…\)
\1
\2
sed <original.tex >replaced.tex \
-e 's/^\(\\section\\*{[0-9]*\.[0-9]*\)\(}\)$/\1.\2/' \
-e 's/^\(\\addcontentsline{toc}{section}{[0-9]*\.[0-9]*\)\(}\)$/\1.\2/'
使用 sed 的另一种方法是,如果该行与所需的模式匹配,则将最后一个替换}
为:.}
sed <original.tex >replaced.tex \
-e '/^\\section\\*{[0-9]*\.[0-9]*}\)$/ s/}$/.&/' \
-e '/^\\addcontentsline{toc}{section}{[0-9]*\.[0-9]*}/ s/}$/.&/'
您还可以使用\|
组合两种模式,但在这种情况下,我认为它会使代码更短但不太清晰。
如果想就地替换文件,在Linux下,可以使用
sed -i -e … somefile.tex