msbuild - sed命令错误 - 如何包含单引号和双引号

时间:2017-10-07 22:56:28

标签: visual-studio visual-studio-2013 sed msbuild

我有GNU makefile我正在翻译为MSBuild

有一个包含sed的命令无法在MSBuild中运行,因为它包含一个'(单引号),它干扰了应该关闭{的单引号{1}} Command任务的属性:

Exec

当我运行它时,Visual Studio会说

  

错误MSB4025:无法加载项目文件。 's'是一个意想不到的标记。期待白色空间。第244行,第25位。

当我将<Target Name="prebuild_cat"> <Exec EchoOff="true" StandardOutputImportance="low" StandardErrorImportance="low" IgnoreExitCode="true" ConsoleToMSBuild="true" Command=' $(GnuSed) 's/^Q(.*)/"&"/' '> </Exec> </Target> 替换为'&apos;替换为"

&quot;
  

错误MSB4025:无法加载项目文件。解析EntityName时发生错误。

1 个答案:

答案 0 :(得分:1)

  

msbuild - sed命令错误 - 如何包含单引号和双引号

根据文件MSBuild Special Characters

  

MSBuild保留一些特定用于特定环境的字符。如果你想在它们被保留的上下文中逐字地使用它们,你只需要转义这些字符。

要转义特殊字符,请使用语法%xx,其中xx表示字符的ASCII十六进制值。

在这种情况下,单引号是ASCII字符39,其中十六进制为27。和&amp;的价值是26,所以正确的转义序列是:

'$(GnuSed) %27s/^Q(.*)/"%26"/%27'

以下是我的测试样本,您可以检查它是否适合您:

  <Target Name="prebuild_cat" AfterTargets="Build">
    <Message Text='$(GnuSed) %27s/^Q(.*)/"%26"/%27' Importance='high' />
  </Target>

输出窗口中的结果:

1>prebuild_cat:
1>   's/^Q(.*)/"&"/'
1>
1>Build succeeded.