【发布时间】:2020-07-23 08:25:08
【问题描述】:
我最近编写了一个脚本,它将解析一大堆文件并在整个过程中递增版本号。该脚本适用于除一个之外的所有文件。它使用以下 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}
我该如何解决这个问题?
【问题讨论】:
-
不要为此使用
sed。使用awk。 -
反斜杠的处理方式一直不同,用
echo \1\2$((\3+1))\4查看输出,不带引号,\n停止被解析为换行符,但V之前的\现在已删除。见上面的评论。 -
您想将 0.123 增加 0.001 还是将 123 增加 1?
-
@Cyrus 查看所需的输出。我想两者实际上都可以工作。
-
@WiktorStribiżew 删除 echo 命令中的引号会删除输出中的所有反斜杠。我会研究
awk,以前从未使用过。
标签: string bash shell sed newline