我有一些脚本根据某些命令的输出生成一些日志文件。日志文件采用以下格式(行号不是实际输出的一部分),
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排除恶作剧。
答案 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
将其转换为正确的格式