Linux ^M問題根源-windows的\r\n linux的\n mac的\r
阿新 • • 發佈:2018-12-14
- 需求:
最近用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
- 小結:
知道原因再去解決就簡單好多了,說到底就是寫檔案的時候換行符寫的不同,可能會導致解析或者看的異常。
福利推薦:加班,祛痘,去油,祛溼必備。我現在也在喝,賣家是個同行小姐姐,有需要就加她瞭解一下吧。