2016-04-18 5 views
0

Я хочу отредактировать xml-файл, используя сценарий оболочки.Редактировать скрипт командной строки xml

я получил что-то вроде этого

<version>1.7.21</version> 

И я хочу, чтобы мой скрипт для редактирования файла .xml, как это, используя переменную

например: $ значение = 3,2 «» команда изменить файл XML «» и получить это:

<version>3.2</version> 

Я искал в Интернете, но ничего не работает для меня ..

Редактировать: Я ищу общий способ.

Например, решение этой должности: How to change specific value of XML attribute using scripting on Mac

не то, что я ищу, потому что это зависит от предыдущего файла XML.

ответ

2

С СЭД:

$ ver=3.2; 
$ sed "s/\(<version>\)[^<]*\(<\/version>\)/\1$ver\2/" <<< "<version>1.7.21</version>" 
<version>3.2</version> 

Чтобы применить его в файл:

$ ver=3.2; 
$ sed -i "s/\(<version>\)[^<]*\(<\/version>\)/\1$ver\2/" file 

Опция -i для редактирования файла вместо.

Update:

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

ver="\/path\/to\/fix\/CHANGE.XML"; 

или изменить SED разделитель с характером вы не будете найдите на своем пути. Пример с |:

sed "s|\(<version>\)[^<]*\(<\/version>\)|\1$ver\2|" 
+0

Спасибо! Я использую этот скрипт в jenkins, и я не могу получить значение $ ver. Я всегда пишу «$ ver» в моем XML-файле. Есть ли способ указать непосредственно переменную в командной строке? (И иногда эта переменная может быть путем, поэтому как бороться с проблемами слэш?) – MxfrdA

+0

@MxfrdA вы должны удвоить цитату '' $ ver "', чтобы развернуть эту переменную. – SLePort

+0

Спасибо, первая проблема решена, я вижу свою переменную. Но когда это путь, скрипт не проходит и получает: sed: -e выражение n ° 1, caractère 53: опция inconnue pour 's '. Извините, мой Jenkins на французском языке – MxfrdA

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