控制M字符的外观奇怪

时间:2014-03-07 09:03:12

标签: linux unix special-characters

我有一些脚本根据某些命令的输出生成一些日志文件。日志文件采用以下格式(行号不是实际输出的一部分),

1   cmd-0-start
2   <the_command>
3   <the_command_output>
4   <prompt>
5   cmd-0-end

现在,由于一些奇怪的原因,包含命令的行(第2行)被控件M字符(^M)拆分为2个单独的行。因此,实际命令的一部分溢出到应该从输出开始的行,即第3行。这是一个示例

1   cmd-0-start
2   <the_^M
3   ^Mcommand>
4   <the_command_output>
5   <prompt>
6   cmd-0-end

这会导致我解析输出的其他脚本造成严重破坏,从而导致对日志的错误分析。我知道我可以删除特殊字符,但我想知道为什么它们首先出现。

我观察到一些模式,
1。它不会出现在所有日志中 - 只有某些日志。
2。受影响的日志具有长命令。
3。在每个受影响的案例中,^ M恰好出现在第69个字符之后!

为什么会发生这种情况的任何想法?

修改

根本没有与任何Windows系统的交互。一切都在Linux上运行。所以我们可以通过Windows排除恶作剧。

2 个答案:

答案 0 :(得分:0)

您可能必须通过dos2unix运行该文件。请参阅man page here

dos2unix infile

原因是某些Windows系统已经编写了该文件。

  

在DOS / Windows文本文件中,换行符也称为换行符          两个字符的组合:回车符(CR)后跟a          换行(LF)。在Unix文本文件中,换行符是单个字符:          换行(LF)。在Mac文本文件中,在Mac OS X之前,换行符          是单一回车(CR)字符。如今Mac OS使用Unix          风格(LF)换行。

答案 1 :(得分:0)

这是因为在dos (CR/LF)中定义新行的方式不同,因为选择了unix (LF)。 使用dos2unix将其转换为正确的格式