Использование sed для изменения значения элемента pom / xml с помощью регулярного выражения - PullRequest
0 голосов
/ 25 июня 2018

У меня есть XML-файл, и я использовал sed для изменения значения элемента "own.version":

<properties>
    <own.version>1.1.77-SNAPSHOT</own.version>
</properties>

Sed:

cat pom.xml | sed -e "s%<own.version>${oldVersion}</own.version>%<own.version>${newVersion}</own.version>%" > pom.xml.transformed

Теперь мой файл pomбудет более общим, и свойства, которые я хочу изменить, могут быть "* .own.version", например:

<properties>
    <a.own.version>1.1.77SNAPSHOT</a.own.version>
</properties>

Как я могу использовать выражение regulare с sed для изменения значения *.own.version

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Это должно сработать, оно захватывает любой префикс «own.version».

sed "s%<\(.*\)own.version>.*</%<\1own.version>${newVersion}</>%" pom.xml > pom.xml.transformed

Шаблон также немного упрощен, если предположить, что существует только одна такая версия, которую нужно изменить (т.е., он захватывает все старые номера версий), а закрывающий идентификатор тега опускается.

0 голосов
/ 25 июня 2018

Поскольку вы сказали, что у вашего Дженкинса нет xmlstarlet, не могли бы вы попробовать awk и сообщить мне об этом.

##Shell variable
new="1.8"
awk -v new_version="$new" '/own\.version/{sub(/>.*</,">"new_version"<")} 1' Input_file

Вывод будет следующим.

<properties>
    <own.version>1.8</own.version>
</properties>

Если вы хотите сохранить вывод в сам файл Input_file, добавьте > temp_file && mv temp_file Input_file к указанному выше коду.

...