Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux sed.exe-e表达式#1,未知命令_Linux_Windows_Sed - Fatal编程技术网

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

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新手。我被指派调查一个错误日志,但在根据一些教程修复它之后,我的问题仍然没有得到解决

以下是原始代码:

@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
    ,因此要小心双引号和转义。所以我只是用
    \x22
    更改了里面的引号,这是通过ASCII码引用字符的另一种方式。(GNU-sed功能)
  • 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%
开头的
%
,这可能是DOS
cmd
脚本中的变量替换。执行
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"