найдите какой-либо шаблон и замените текст в середине строки, игнорируя последний символ строки - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь найти шаблон, используя 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

Мне нужно заменить 3 значения в вышеуказанном файле с помощью SED.

  1. Source = <someIP> (следует заменить IP до;)
  2. Password = <someText> (следуетигнорировать последний символ ")
  3. Profile = <someValue> (следует заменить значение в" ")

Я попытался с помощью приведенных ниже команд найти 3 шаблона:

sed -i -r 's#Source=[^ ;]*#Source=10.10.10.10#' appsettings.json"

SED, используемый для шаблона источника, работает нормально, как и ожидалось (что означает, что я могу заменить значение указанным IP-адресом)

sed -i -r 's#Password=[^ ]*#Password=abc@123#' appsettings.json"

SED, используемый для пароля, работает, но последнийсимвол (который ") в этой строке также заменяется, мне нужно только заменить пароль, а последний символ (который") следует игнорировать.

sed -i -r 's#Profile:["^ "]*#Profile:"sample"#' appsettings.json"

SED должен искать шаблон профиляв файле и заменить текст, который я передаю

Expвыполнив команду SED, я должен увидеть обновленный файл настроек, как показано ниже:

$ 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 Ответ

1 голос
/ 08 июля 2019

Для этого конкретного фрагмента следующие работы:

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
...