为什么此正则表达式缺少引号?

时间:2018-11-11 16:55:59

标签: regex sed

我正在尝试使用sed来增加conf文件中的版本号。版本号的格式如下: MENDER_ARTIFACT_NAME = "release-6"

使用以下内容:

sed -r 's/(.*)(release\-)([0-9]*)(.*)/echo "\1\2$((\3+1))\4"/ge'

结果是这样的: MENDER_ARTIFACT_NAME = release-7

I.E。它有效,但是缺少引号。我已经检查了正则表达式文档,并且(。*)应该与所有非换行符匹配任意次,因此第一个应该匹配所有内容,包括release-6前的引号,第二个应该匹配所有内容,包括引号,release-6之后。相反,它似乎完全删除了引号。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

根据documentation

  

e标志将替换结果作为shell命令执行...

表示引号用于显示一堆字符。即尝试echo MENDER_ARTIFACT_NAME = "release-6"。您应该在echo语句中手动添加转义的引号:

sed -r 's/^(.*)(release\-)([0-9]+)/echo "\1\\"\2$((\3+1))\\""/ge'