@inscriptios

Двойные кавычки в регулярных выражениях sed в окружении DOS

Здравствуйте, уважаемые!

Начал освоение порта утилиты sed под Win32 для решения нескольких тривиальных задач. И практически сразу столкнулся с проблемой (что, думаю, неудивительно). Чтение различных ресурсов и всевозможный поиск не помогает, а на глубокое изучение регулярных выражений (где, вероятно, есть ответ) нет времени. Прошу помощи!

Задача

Есть файл, содержащий следующую строку:

if file_getprop("/system/build.prop","ro.build.display.id")!="ROM v.6.0 beta" then


Необходимо с помощью командного файла Windows, с использованием sed найти эту строку и заменить часть 6.0 beta на значение переменной, задаваемой при запуске командного файла, при этом указанная часть может быть любой длины, например, 6.0 alpha и может не содержать буквенных символов, например, 6.0. Для решения задачи в однострочном скрипте хотел использовать символ " (двойных кавычек), однако, в таком случае утилита работает не правильно.

Содержание командного файла:

@echo off

set MOD=d:\ROM\KITCHEN\MOD
set UnxUtils=d:\ROM\KITCHEN\TOOLS\UnxUtils\usr\local\wbin
set TEMP=d:\ROM\KITCHEN\TEMP

set /p ROMVER=Введите версию прошивки: 

%UnxUtils%\sed.exe -e "/ROM/s/v\..*"/v.%ROMVER%"/g" %MOD%\META-INF\com\google\android\aroma-config > %TEMP%\aroma-config
move /y %TEMP%\aroma-config %MOD%\META-INF\com\google\android\aroma-config

pause


При использовании указанного кода, если исходная строка выглядит следующим образом:

if file_getprop("/system/build.prop","ro.build.display.id")!="ROM v.6.0 beta" then


а переменная ROMVER принимает значение равное 1.0, то на выходе получаем следующее:

if file_getprop("/system/build.prop","ro.build.display.id")!="ROM v.1.0


что явно не соответствует ожидаемому. Насколько я понимаю, в UNIX реализации sed такой проблемы не возникает, т.к. скрипт sed заключается в одинарные кавычки и использование двойных в теле скрипта не приводит к таким последствиям...

Буду благодарен за любую помощь, спасибо!
  • Вопрос задан
  • 4579 просмотров
Решения вопроса 1
@inscriptios Автор вопроса
Ответ получил на другом ресурсе, необходимо было сделать две вещи:

1. Использовать более новую версию утилиты sed.
2. Заменить кавычки в теле скрипта на \x22.

Итоговый код должен выглядеть следующим образом:

@echo off
set MOD=d:\ROM\KITCHEN\MOD
set UnxUtils=d:\ROM\KITCHEN\TOOLS\UnxUtils\usr\local\wbin
set TEMP=d:\ROM\KITCHEN\TEMP
set /p ROMVER=Введите версию прошивки: 
%UnxUtils%\sed.exe -e "/ROM/s/v\..*\x22/v.%ROMVER%\x22/g" %MOD%\META-INF\com\google\android\aroma-config > %TEMP%\aroma-config
move /y %TEMP%\aroma-config %MOD%\META-INF\com\google\android\aroma-config
pause

или еще лучше так:

@echo off
set MOD=d:\ROM\KITCHEN\MOD
set UnxUtils=d:\ROM\KITCHEN\TOOLS\UnxUtils\usr\local\wbin
set TEMP=d:\ROM\KITCHEN\TEMP
set /p ROMVER=Введите версию прошивки: 
%UnxUtils%\sed.exe -e "/ROM v/s/\(ROM v\.\)[^\x22]*\x22/\1%ROMVER%\x22/g" %MOD%\META-INF\com\google\android\aroma-config > %TEMP%\aroma-config
move /y %TEMP%\aroma-config %MOD%\META-INF\com\google\android\aroma-config
pause
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы