Как использовать команду sed с регулярным выражением? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть входной файл (файл PowerCenter xml), и мне нужно заменить ярлык для целевой среды.Поэтому мне нужно найти строку с SHORTCUT, а затем изменить параметр в REPOSITORYNAME

Я пытаюсь найти подстроку из REPOSITORYNAME, чтобы eol и заменить первое вхождение «что угодно» между кавычками,Я нашел регулярное выражение ". *?"который работает в regexr.com, но не в bash

input=SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="ZRH_PCE_P01" VERSIONNUMBER="1"/>"

x=$(echo $input | grep -o 'REPOSITORYNAME.*>' | sed -r '{0,/\".\+?\"/s/\".\+?\"/\"TARGET\"/}')
echo $x;


input="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="any_word" VERSIONNUMBER="1"/>"

another possible input="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME = "any_word" VERSIONNUMBER="1"/>"

output="SHORTCUT COMMENTS="" REFERENCETYPE="LOCAL" REFOBJECTNAME="mplt_EBXSOAPExport" REPOSITORYNAME="updated" VERSIONNUMBER="1"/>"

Спасибо

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете использовать следующее:

sed '/SHORTCUT/s/REPOSITORYNAME\s*=\s*"[^"]*"/REPOSITORYNAME="WhatYouWant"/'

Это проверяет, что строка содержит SHORTCUT, и когда это делает, она выполняет поиск / замену, совпадающую с REPOSITORYNAME и его значением, и заменяет последнее на новое.

Вы можете попробовать здесь !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...