Linux 使用cpp预处理将字符串中的0x0D替换为0x0A

Linux 使用cpp预处理将字符串中的0x0D替换为0x0A,linux,sed,makefile,preprocessor,Linux,Sed,Makefile,Preprocessor,在我的工作场所,我们使用的是一种旧的专有语言和一些C宏。为了编译这段代码,必须使用脚本对其进行大量整理,我希望将其标准化为实际的makefile 现在我遇到了一个问题,代码中的某些字符串定义中有0x0D(\r)字符,在通过cpp后,这些字符会显示为0x0A(\n)并阻止编译 我曾尝试运行sed-e的/\x0A/\x0D/g',但这(以及大量排列)似乎对输出没有任何影响。关于如何解决这个问题,您有什么想法吗?请参阅unix2mac。这在cygwin上的dos2unix包中,因此可能在linux发行

在我的工作场所,我们使用的是一种旧的专有语言和一些C宏。为了编译这段代码,必须使用脚本对其进行大量整理,我希望将其标准化为实际的makefile

现在我遇到了一个问题,代码中的某些字符串定义中有0x0D(\r)字符,在通过cpp后,这些字符会显示为0x0A(\n)并阻止编译


我曾尝试运行sed-e的/\x0A/\x0D/g',但这(以及大量排列)似乎对输出没有任何影响。关于如何解决这个问题,您有什么想法吗?

请参阅
unix2mac
。这在cygwin上的dos2unix包中,因此可能在linux发行版上的一个类似名称的包中。

您能用示例代码行说明您的意思吗?字符串是否包含
\r
序列,或
\x0A
\012
或是文字回车,还是其他内容?如果它是一个文本回车,那么问题一定是“为什么”?它是一个无法真正呈现的文本回车字符串,由于我没有编写代码,我不知道为什么。不幸的是,我会仔细研究您的旧语言,看看是否有任何方法可以避免在字符串中嵌入回车符。通常(但并非总是)有一种方法可以包含这样的字符——可能是使用ASCII(13)或其他函数调用。如果你真的无法避免将它们放在原始源中,那么我会考虑是否还有其他字符(也许^ A,控件A)没有出现在源代码中。然后我考虑将所有的m(回车)映射到^ a,然后将代码传递给C预处理器,然后在提交编译之前将^ a映射到^ m。不幸的是,改变源是不可能的。我想我们是在同一页上,因为我在预处理代码时按照您的建议做了下面的操作,所以它不会在cpp中更改。我真的试图避免递归地将include语句的源文件变灰,这样我就可以将它们预处理到临时目录中。摇滚-我-硬地嗯。那个么,这是否归结为用两个ascii字符“\”和“r”替换不紧跟换行符的文本回车<代码>$perl-pe's/\r(?!\n)/\\r/g'。唉,这不起作用,因为它将我的\x0A转换为\x0A\x0D