搜索某种模式并替换该行中间的某些文本,而忽略该行的最后一个字符

时间:2019-07-08 20:03:16

标签: linux bash shell scripting sh

我正在尝试使用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个值。

  1. Source = <someIP>(应将IP替换为;)
  2. Password = <someText>(应忽略最后一个字符“)”
  3. 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

1 个答案:

答案 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