sed.exe -e表达式#1,未知命令

时间:2019-03-27 05:11:51

标签: linux windows sed

首先,对不起,如果重复,但我是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 :(得分:0)

尝试一下(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,具体取决于不同的区域设置,它们可以包含/,这可能是原因您的错误。我尝试了另一种获取日期的方法,从this answer复制了想法。
  • 您可以将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"