2016-11-28 5 views
-1

У меня есть XML-файл, который содержит свойство «Описание». Я хотел бы заменить содержимое этого свойства другим описанием. Я использую SED команды в Groovy скриптЗаменить значение, используя REGEX с Groovy и SED

<VisualElements Description="foo" Title="title"/> 

Я попытался следующую строку, но она не заменяет значение «Описание» значение со строкой «бар».

def sedCommand = 'sed -i \'s/Description="([^"]*)"/Description="bar"/g\' package.appxmanifest' as String 

Может кто-нибудь сказать мне, что не так с вышеуказанной линией?

Обновление: на основе комментариев Wiktor Stribiżew в поле ниже, я обновил команду, чтобы отразить последнюю ошибку

+0

Что делать, если вы удалите '\ (' и '\)'? Или попробуйте удвоить обратную косую черту там: '\ (' -> '\\ (', '\)' -> '\\)'. Кроме того, вы можете использовать '-i.bak' вместо' -i'. –

+3

Почему вы используете sed? Просто используйте groovy ... –

+0

@ WiktorStribiżew Ваше предложение удалило ошибку «неожиданного персонажа». Однако он по-прежнему не заменяет содержимое свойства «Описание» значением «bar». Я буду обновлять исходное сообщение. – jaxim

ответ

1

Вы используете SED с регулярным выражением BRE (т.е. без -E или -r опций), так что ваши ( и ) разобраны как literal круглые скобки, а не группировка. Во всяком случае, вы не используете обратные ссылки и заменить весь матч, нет никакого смысла держать скобки вообще:

def sedCommand = 'sed -i \'s/Description="[^"]*"/Description="bar"/g\' package.appxmanifest' as String 
              ^^^^^ 

будет хорошо работать.

Если вам нужно использовать переменные, см How do I use variables in a sed command?

СЕПГ команда будет выглядеть

#!/bin/bash 
foo="hello" 
echo '<VisualElements Description="foo" Title="title"/>' | \ 
sed 's/Description="[^"]*"/Description="'$foo'"/g' 

См this demo.

+0

Удаление скобок работает, но у меня все еще возникают проблемы с переменной. Я использую groovy AND sed, поэтому не так ясно, как использовать переменную, как при использовании sed. – jaxim

Смежные вопросы