首先,对不起,如果重复,但我是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环境中运行了此
。答案 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"