sed脚本用换行符替换字符串中的字符串“ \ n”

问题描述 投票:1回答:2

我最近编写了一个脚本,该脚本将解析一堆文件并在整个过程中增加版本号。该脚本适用于除一个文件以外的所有文件。它使用以下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}

我该如何解决?

string bash shell sed newline
2个回答
0
投票

使用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}

0
投票
“我想要的特定行。但是,通过简单的更改,我就可以使用原始的sed方法。

我的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}

并以所需的结果结束。我想这有点丑陋,但是可以满足我的需求!

© www.soinside.com 2019 - 2024. All rights reserved.