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

Linux 搜索某些模式并替换行中间的一些文本,忽略行的最后一个字符,linux,bash,shell,scripting,sh,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 C

我尝试使用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=
    (应替换IP,直到;)
  • Password=
    (应忽略最后一个字符)
  • Profile=
    (应替换“”中的值)
  • 我尝试使用以下命令搜索3种模式:

    sed -i -r 's#Source=[^ ;]*#Source=10.10.10.10#' appsettings.json"
    
    用于源模式的SED工作正常(这意味着我能够用提供的IP地址替换该值)

    用于密码的SED正在工作,但该行中的最后一个字符(即“)也将被替换,我只需要替换密码,并且应忽略最后一个字符(即“)

    sed -i -r 's#Profile:["^ "]*#Profile:"sample"#' appsettings.json"
    
    SED应该在文件中搜索模式配置文件并替换我传递的文本

    预期执行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
    

    对于这个特定的代码段,以下工作:

    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
    

    使用合适的工具进行作业。等的可能重复项。ec2-123-000-111-123.us-east-1.compute.amazonaws.com不是IP地址。它看起来像一个主机名。IP地址看起来像n.n.n.n(IPv4)或xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx(IPv6)
    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