【发布时间】:2017-10-08 18:56:07
【问题描述】:
我正在将GNU Makefile 翻译成MSBuild XML。
我有以下sed 命令(较大命令的一部分):
... | sed 's/^Q(.*)/"&"/' | ...
当我只执行Cygwin 中的sed 部分时,它“有效”,因为它不会出错。
但是,在我将其翻译为 MSBuild XML 之后 - 将 XML 敏感符号替换为 "、&、' - 我得到了错误
sed: 不支持的命令'
我确定这不是 XML 转义问题; Visual Studio 构建日志说
任务参数:Command="C:\Program Files\GNU ARM Eclipse\Build Tools\2.8-201611221915\bin\sed" 's/^Q(.*)/"&"/' (TaskId:21)
sed: 不支持的命令' (TaskId:21)
命令 ""C:\Program Files\GNU ARM Eclipse\Build Tools\2.8-201611221915\bin\sed" 's/^Q(.*)/"&"/' " 以代码 1 退出。 (任务 ID:21)
命令被翻译成原意的sed 's/^Q(.*)/"&"/'
但是,cmd.exe 现在似乎存在问题。
关于cmd.exe,它不喜欢该命令的哪一部分?
是单引号/双引号吗? & 符号?
我正在使用表from here。
【问题讨论】:
-
不知道,因为它似乎是您正在使用的
sed版本,它反对它正在接收的命令。如果您确定是cmd不合作,那么cmd将^、)、&视为特殊字符。我会尝试用^转义每个's/^^Q(.*^)/"^&"/'-^通常会转义cmd中的有问题的字符 - 除了%被%转义 -
@Magoo 我将
's/^Q(.*)/"&"/'放在一个文本文件中,并像sed -f sedCmd.txt一样调用它,我得到了相同的错误消息。这会缩小范围吗? -
这似乎与
bash没有任何关系 -
在插入符号的情况下,您可能需要转义转义字符
's/^^^Q(.*)/"^&"/',我怀疑右括号是否需要转义。 -
@Adrian 当您为任何给定的命令编写
command 'script'时,'s 将分隔您的脚本,以便您的操作系统知道它从哪里开始/结束,然后将其传递给command。当您将script放入要使用command -f执行的文件中时,您需要放入文件中的部分只是脚本,而不是在命令行中分隔它的's。所以把s/^Q(.*)/"&"/放到脚本文件中而不是's/^Q(.*)/"&"/'再试一次。
标签: batch-file sed cmd msbuild