• 需求

最近用logstash解析文件,发觉该文件在vi里是同一行,用^M分隔,但是在编辑器里看就是换行的。导致logstash解析不了该文件,logstash默认是\n。

  • 原因

unix/linux文件模式识别的换行结尾是:换行 = LF = \n = $ = ASCII代码10 = 十六进制 0x0A

mac文件模式识别的换行结尾是:回车 = CR = \r = ^M = ASCII代码13 =十六进制代码 0x0D

dos/windows文件模式识别的结尾是: 回车+换行 = CR+LF = \r\n = ^M$

!!!!!! 文中的所有^M都是linux里面一起按ctrl + v + m(有时可能需要分开按ctrl+v ctrl+m)的字符,记得这两个符号的颜色是深蓝色的,^就是ctrl+v按出来的,M是ctrl+m按出来的。

  • 解决办法:

1.sed替换换行符

sed -i 's/^M/\n/g' filename  (不要照copy,记得把^M替换成一起按ctrl + v + m的字符)

2.mac2unix替换换行符

mac2unix filename

3.改logstash conf文件

delimiter => "^M"

4.vim里面改

:set ff查看当前文本的模式类型

:e ++ff=mac 看看文本模式类型改成mac的样子

:w ++ff=mac 文本模式类型保存成mac,改了再看文件模式还是unix,但是已经换行了

批量改:

for file in ${ls *)

do

  vi + ':w ++ff=mac' +':q' ${file}

done

  • 小结:

知道原因再去解决就简单好多了,说到底就是写文件的时候换行符写的不同,可能会导致解析或者看的异常。

 

福利推荐:加班,祛痘,去油,祛湿必备。我现在也在喝,卖家是个同行小姐姐,有需要就加她了解一下吧。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐