sed.exe -e выражение # 1, неизвестная команда - PullRequest
2 голосов
/ 27 марта 2019

Прежде всего, извините, если он дублируется, но я совершенно новичок в Sed. Мне поручили исследовать журнал ошибок, но после исправления, основанного на некоторых руководствах, моя проблема все еще не решена.

Вот оригинальный код:

@sed.exe -i "s/\(.*CONFIG_PROJECT_SW_DATE_VERSION=\"\).*\(\"\)/\1%date:~2,2%%date:~5,2%%date:~8,2%\2/g/" .\ghsproj_du2_avc_src.gpj

после запуска я получил следующую ошибку:

03-27 13:22:43 sed.exe: -e expression #1, char 53: unknown option to `s'
03-27 13:22:43 Could Not Find C:\jenkins-slave\workspace\project\work\build\ghs\sed*

Я читал некоторые решения, такие как удаление пробела между командами -i и s или ввод «/» в конце, но пока ничего не работает.

P / S: Я запустил это в среде Windows 10.

1 Ответ

0 голосов
/ 27 марта 2019

Попробуйте это (GNU sed):

for /f "tokens=2 delims==" %a in ('wmic OS Get localdatetime /value') do set "dt=%a"
sed.exe "s@\(.*CONFIG_PROJECT_SW_DATE_VERSION=\x22\).*\(\x22\)@\1%dt:~2,2%%dt:~4,2%%dt:~6,2%\2@g" file

Измените два %a на %%a, если вы помещаете их в пакетный файл.
Я удалил переключатель -i, добавьтекогда вы проверили, что с выводом все в порядке.

Несколько вещей, которые следует учитывать:

  • Вы используете sed на cmd или в пакетном файле, поэтому будьте осторожныо двойных кавычках и побеге.Поэтому я просто изменил кавычки внутри с помощью \x22, что является еще одним способом ссылки на символы по их ASCII-коду.(Особенность GNU sed).
  • На cmd или в пакетном файле %date:~2,2%%date:~5,2%%date:~8,2% не гарантируется равным YYMMDD, в зависимости от различных настроек локали, они могут иметь / внутри, возможно, это является причиной вашей ошибки.Я попробовал другой способ получить дату, скопировал идею из этого ответа .
  • Вы можете изменить разделитель команды s на другой символ, здесь я изменил на @.
  • Не должно быть / после флага g.

Пример:

> type file
var CONFIG_PROJECT_SW_DATE_VERSION="whatever"

> @for /f "tokens=2 delims==" %a in ('wmic OS Get localdatetime /value') do @set "dt=%a"
> sed.exe "s@\(.*CONFIG_PROJECT_SW_DATE_VERSION=\x22\).*\(\x22\)@\1%dt:~2,2%%dt:~4,2%%dt:~6,2%\2@g" file
var CONFIG_PROJECT_SW_DATE_VERSION="190327"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...