sed用新字符串替换捕获组

问题描述

我在文件中有此字符串:

def code = project.hasProperty('versionName') ? versionName : "444444"

我只想用55555替换444444

我尝试过:

sed  -E 's/versionName.*\"(.+)\"/55555/' my.gradle

但结果:

def code = project.hasProperty('55555

我做错了什么,最简单的方法是什么?

解决方法

您能否请尝试按照GNU sed中显示的示例进行跟踪,编写和测试(也应适用于NON GNU sed)。

sed -E 's/(.*versionName : ")[0-9]+(.*)/\155555\2/' Input_file

说明: 使用sed的{​​{1}}选项在代码中启用ERE。然后使用-E的替换选项进行替换。使用sed的功能将匹配的正则表达式存储在临时缓冲存储器中(无论我们在sed中将(....)与正则表达式一起使用,都可以确保该值对于每次迭代都是安全的,并且我们可以访问这些值sed1等等),具体取决于2选项后(....)的数目)。第一个正则表达式匹配所有内容,直到s,然后寻找数字(不存储在内存中),然后将其余行保存在第二个临时内存值中。在执行替换时,只需提及versionName : "以获得第一个匹配的部分并放置新值,然后放置\1即可访问第二个商店的值。

,

这是使用awk的替代解决方案:

awk -F 'versionName[ \t]*:[ \t]*' '{$2 = "versionName : \"55555\""} 1' file
def code = project.hasProperty('versionName') ?  versionName : "55555"