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"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...