Linux sed.exe-e表达式#1,未知命令
首先,很抱歉,如果它是重复的,但我是一个完全的Sed新手。我被指派调查一个错误日志,但在根据一些教程修复它之后,我的问题仍然没有得到解决 以下是原始代码:Linux sed.exe-e表达式#1,未知命令,linux,windows,sed,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
@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环境下运行了此操作。
尝试此操作(GNU-sed): 如果要将这两个%a
放在批处理文件中,请将其更改为%a
。我删除了
-I
开关,在测试输出是否正常时将其添加回
需要考虑的几件事:
- 您正在
上或批处理文件中使用cmd
,因此要小心双引号和转义。所以我只是用sed
更改了里面的引号,这是通过ASCII码引用字符的另一种方式。(GNU-sed功能)李>\x22
- 在
或批处理文件中,cmd
不能保证是%date:~2,2%%date:~5,2%%date:~8,2%%date:~8,2%
,根据不同的语言环境设置,它们可以包含yymmd
//code>,可能是您出错的原因。我试着用另一种方法来获得日期,从中复制了这个想法
- 您可以将
命令的分隔符更改为其他字符,我在这里更改为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"
g
修饰符后的斜杠是一个错误-甚至可能是错误。删除-i
和s///g
命令之间的空格没有帮助;这会让事情变得更加混乱。@JonathanLeffler谢谢你的回答,我已经编辑了代码并删除了反斜杠,但它会返回另一个错误:sed.exe:-e expression#1,char 1:unknown command:`。'Character position 53是%日期:~2,2%
开头的%
,这可能是DOScmd
脚本中的变量替换。执行echo%数据:~2,2%
(或其等效项-以某种方式显示扩展的结果),结果中(几乎可以肯定)会有一个斜杠,而这个斜杠会使您的命令失效。相应调整数字;在将单独的%date:…%
位构建到sed
命令中之前,先测试它们。请注意,即使在编辑之后,您当前仍有“s/…/g/”
。您只需要“s/../…/g”
。这些是斜杠,不是反斜杠。但我很有信心你的约会子串操作会让你伤心。您还可以尝试简单地作为一个整体回显命令,以查看传递的是什么sed
。
> 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"