我最近编写了一个脚本,该脚本将解析一堆文件并在整个过程中增加版本号。该脚本适用于除一个文件以外的所有文件。它使用以下sed命令(通过各种google搜索和非常有限的sed知识拼凑而成)在.tex文件中查找一行并增加版本号。
sed -i -r 's/(.*)(VERSION\}\{0.)([0-9]+)(.*)/echo "\1\2$((\3+1))\4"/ge' fileName.tex
上述问题(我不确定如何解决)是它发现要更改的行显示为
\newcommand{\VERSION}{0.123}
,
sed命令用换行符替换上一行中的“ \ n”,并输出
[ewcommand{\VERSION}{0.124}
(前面有换行符)。
所需的输出将是:
\newcommand{\VERSION}{0.124}
我该如何解决?
使用GNU awk。
使用.*{
和}
作为字段分隔符和递增字段2:
awk -F '(.*{|})' '{print "\\newcommand{\\VERSION}{" $2+0.001 "}"}' file
[[0-9.]+
描述您的字段的内容,此处为版本号:
awk 'BEGIN{FPAT="[0-9.]+"}{print "\\newcommand{\\VERSION}{" $1+0.001 "}"}' file
两种情况下的输出:
\ newcommand {\ VERSION} {0.124}
我的sed命令变成两个,第一个创建一个临时字符串%TMPSTR%
,然后立即替换所述临时字符串以获取所需的输出并避免出现任何换行符。
sed -i -r 's/(.*)(VERSION\}\{0.)([0-9]+)(.*)/echo "\\%TMPSTR%{\\\2$((\3+1))\4"/ge' fileName.tex
sed -i -r 's/%TMPSTR%/newcommand/g' fileName.tex'
因此文件中的行来自
\newcommand{\VERSION}{0.123}
->\%TMPSTR%{\VERSION}{0.124}
->\newcommand{\VERSION}{0.124}
并以所需的结果结束。我想这有点丑陋,但是可以满足我的需求!