问题描述
我在文件中有此字符串:
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
中将(....)
与正则表达式一起使用,都可以确保该值对于每次迭代都是安全的,并且我们可以访问这些值sed
,1
等等),具体取决于2
选项后(....)
的数目)。第一个正则表达式匹配所有内容,直到s
,然后寻找数字(不存储在内存中),然后将其余行保存在第二个临时内存值中。在执行替换时,只需提及versionName : "
以获得第一个匹配的部分并放置新值,然后放置\1
即可访问第二个商店的值。
这是使用awk
的替代解决方案:
awk -F 'versionName[ \t]*:[ \t]*' '{$2 = "versionName : \"55555\""} 1' file
def code = project.hasProperty('versionName') ? versionName : "55555"