1. 程式人生 > >Linux ^M問題根源-windows的\r\n linux的\n mac的\r

Linux ^M問題根源-windows的\r\n linux的\n mac的\r

  • 需求

最近用logstash解析檔案,發覺該檔案在vi裡是同一行,用^M分隔,但是在編輯器裡看就是換行的。導致logstash解析不了該檔案。

  • 原因

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的字元,而不是^ + M  

  • 解決辦法:

1.sed從mac轉成unix

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

批量改:

for file in ${ls *)

do

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

done

  • 小結:

知道原因再去解決就簡單好多了,說到底就是寫檔案的時候換行符寫的不同,可能會導致解析或者看的異常。

福利推薦:加班,祛痘,去油,祛溼必備。我現在也在喝,賣家是個同行小姐姐,有需要就加她瞭解一下吧。