2014-03-07 56 views
1

我有几个脚本根据某些命令的输出生成一些日志文件。日志文件来以下面的格式(行号不是实际输出的一部分),控制M字符奇怪的外观

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

现在,一些奇怪的原因,含有该命令(第2行)的行正变得由分割成2条独立的线控制M字符(^M)。由于这个原因,实际的命令的一部分被泄漏到从哪里输出应该行开始,即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

是的,你会如何猜测我们如何在不知道脚本的情况下创建这个虚假角色? – jlliagre

+0

你从'echo $ COLUMNS'中得到了什么吗?祝你好运。 – shellter

回答

0

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

dos2unix infile 

之所以会出现一些windows系统写入文件的原因。

在DOS/Windows的文本文件的换行,也被称为换行,是两个字符的 组合:一个回车(CR),接着是 换行(LF)。在Unix文本文件中,换行符是单个字符: 换行符(LF)。在Mac文本文件中,在Mac OS X之前,换行符 是单个回车符(CR)字符。现在,Mac OS使用Unix 样式(LF)换行符。

0

这是因为在新线在DOS (CR/LF)定义为oposed到UNIX (LF)方式的差异。 使用dos2unix将其转换为适当的格式