2013-07-11 2 views
0

у меня есть файл со следующим содержимымсценарий оболочки: заменить содержимое

FileName: VersionInfo.properties

Installed Version:13.7.0-2 
Previous Version:13.6.0-12 

FileName: main.sh

#!/bin/ksh 
new_maj_version=$1 # sample content: 13.7.0 
new_min_version=$2 # sample content: 4 

Каждый Я запускаю свой файл main.sh. Я хочу, чтобы он редактировал мой файл VersionInfo.properties. Установленная версия должна перейти в предыдущую версию, а my new_maj_version и new_min_version - в установленную версию. Как я могу это достичь?

Пример выходных данных после запуска моего main.sh

FileName: VersionInfo.properties

Installed Version:13.7.0-4 
Previous Version:13.7.0-2 

ответ

1

попробовать это: (сохраните его на main.sh):

#!/bin/ksh 
awk -F: -v a="$1" -v i="$2" 'NR==1{n=$2;print $1":"a"-"i;next}{print $1":"n}' /VersionInfo.properties > /tmp/tmpVersion && mv /tmp/tmpVersion VersionInfo.properties 

попробуйте с

main.sh "13.7.0" "4" 
+0

Он работал. Теперь у меня есть файл rollback.sh, в котором номер версии жестко задан как 'uninstall_rpm ClientInfrastructure 13.6.0-12'. Как я могу заставить этот скрипт отката выбрать «предыдущую версию» в 'VersionInfo.properties' вместо жесткого кодирования? – Jill448

+0

Ваша проблема «rollback.sh» не описана четко. что жестко закодировано? после выполнения rollback.sh, что произойдет? где находится часть 'uninstall_rpm ClientInfrastructure'? Я не могу помочь дальше. Прости. Этот ответ на ваш текущий вопрос. Если он решит вашу проблему, я счастлив. – Kent

+0

Ваш ответ решает мою проблему. Если вы хотите решить другую проблему, пожалуйста, взгляните на http://stackoverflow.com/questions/17597901/shell-script-replace-contents – Jill448

0

Это должно сделать трюк

sed -e "/Installed Version/{s/Installed Version:\(.*\)/Installed Version:$major_version-$minor_version\nPrevious Version:\1/; n}" -e '/Previous Version/{d}' 
VersionInfo.properties 
+0

Он сделал трюк только один раз. 2-й раз, когда он не переместил мою установленную версию на предыдущую версию. 'main.sh" 13.7.0 "" 4 " Установленная версия: 13.7.0-4 Предыдущая версия: 13.6.0-12 (второй раз я запустил ее снова) main.sh" 13.7.0 "" 9 " Установленная версия: 13.7.0-9 Предыдущая версия: 13.6.0-12' – Jill448

+0

@ sravs448, она работает для меня. Обратите внимание, что вышеприведенная команда записывает обновленные версии в стандартный вывод, вам нужно добавить сантехнику, чтобы обновить оригинал 'VersionInfo.properties'. Пока вы постоянно обновляете '$ major_version' и' $ minor_version', это будет продолжать работать при последующих запусках – iruvar

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