我正在尝试使用SED搜索模式,并尝试在行之间的=之后替换一些文本(IP地址)。 但这要替换到行尾,在这里我需要忽略行中的最后一个字符“。
这是我需要更新的文件。
$ cat appsettings.json
......
..........
"ConnectionStrings": {
"PMIEnterpriseDbLocal":"Data Source=ec2-123-000-111-123.us-east-1.compute.amazonaws.com;Initial Catalog=FunnyTestDb;Persist Security Info=True;User ID=sa;Password=W@rld111"
},
......
.......
"Profile": "testing",
..............
.....
END OF FILE
我需要使用SED在上述文件中替换3个值。
Source = <someIP>
(应将IP替换为;)Password = <someText>
(应忽略最后一个字符“)” Profile = <someValue>
(应替换“”中的值)我尝试使用以下命令搜索3种模式:
sed -i -r 's#Source=[^ ;]*#Source=10.10.10.10#' appsettings.json"
用于Source模式的SED可以正常工作(这意味着我可以用提供的IP地址替换该值)
sed -i -r 's#Password=[^ ]*#Password=abc@123#' appsettings.json"
用于密码的SED可以正常工作,但该行中的最后一个字符(“”)也将被替换,我只需要替换密码,而忽略最后一个字符(“”)。
sed -i -r 's#Profile:["^ "]*#Profile:"sample"#' appsettings.json"
SED应该在文件中搜索模式Profile,并替换我通过的文本
期望执行SED命令,我应该看到更新的appsetting文件,如下所示:
$ cat appsettings.json
......
..........
"ConnectionStrings": {
"PMIEnterpriseDbLocal":"Data Source=10.10.10.10;Initial Catalog=FunnyTestDb;Persist Security Info=True;User ID=sa;Password=abc@123"
},
......
.......
"Profile": "sample",
..............
.....
END OF FILE
答案 0 :(得分:1)
对于此特定代码段,以下作品:
sed -i -r -e 's#Source=[^ ;]*#Source=10.10.10.10#' -e 's#Password=[^ "]*#Password=abc@123#' -e 's#"Profile": "[^ "]*"#"Profile": "sample"#' appsettings.json
.....
.........
"ConnectionStrings": {
"PMIEnterpriseDbLocal":"Data Source=10.10.10.10;Initial Catalog=FunnyTestDb;Persist Security Info=True;User ID=sa;Password=abc@123"
},
......
.......
"Profile": "sample",
............
......
END OF FILE