使用SED转换Visual Studio TMS320C55x编译器的输出

使用SED转换Visual Studio TMS320C55x编译器的输出,sed,Sed,我试图让SED转换TMS320C55x编译器的输出,以便Visual Studio能够正确解析它(因此,当您单击一个错误/警告时,它会跳转到源代码中的位置。我在其他编译器中成功地做到了这一点,但没有经常使用SED,因此这一次我失败了 编译器输出的格式为: "<file>", line <line>: <error|warning> <id>: <text> 我需要将其转换为: <file>(<line>) :

我试图让SED转换TMS320C55x编译器的输出,以便Visual Studio能够正确解析它(因此,当您单击一个错误/警告时,它会跳转到源代码中的位置。我在其他编译器中成功地做到了这一点,但没有经常使用SED,因此这一次我失败了

编译器输出的格式为:

"<file>", line <line>: <error|warning> <id>: <text>
我需要将其转换为:

<file>(<line>) : <error|warning> <id>: <text>
关键是()部分


谢谢。

我可以通过以下方式获得输出:

c:\src>echo "ImageBuffer.c", line 21: error #20: identifier "p" is undefined
    | sed -e "s/\"//" -e "s/\", line /(/" -e "s/:/) :/"
ImageBuffer.c(21) : error #20: identifier "p" is undefined
我必须对
字符进行转义,因为我是从
cmd.exe
进行转义的,但是如果您只使用单引号围绕
sed
命令,则可以在更为单一的环境中使用它们

单个
sed
命令:

  • “s/\”/“
    从文件名中删除起始引号
  • “s/\”,line/(/“
    去掉文件名的结尾引号,并用行号前的左括号替换文件名和行号之间的文本
  • “s/:/):/”
    删除一些其他不必要的文本后,将右括号放在行号后面

谢谢。我也在使用cmd.exe(可能是隐式的,因为这是为了与Visual Studio兼容)。这是现成的。您的解决方案比我使用的正则表达式简单得多,但我认为我真正的问题是使用了“分隔符”而不是因为所有的例子都是针对*nix shell environments.Doh!我不确定您使用的是哪种sed。如果您运行的是Cygwin,单引号在其bash shell中就可以了。另一方面,我从cmd.exe运行MinGW,所以我在这方面有点受限。很高兴我能提供帮助。
ImageBuffer.c(2) : error #20: identifier "p" is undefined
c:\src>echo "ImageBuffer.c", line 21: error #20: identifier "p" is undefined
    | sed -e "s/\"//" -e "s/\", line /(/" -e "s/:/) :/"
ImageBuffer.c(21) : error #20: identifier "p" is undefined