Unix系統(tǒng)里性湿,每行結(jié)尾只有“<換行>”,即“\n”满败;Windows系統(tǒng)里面肤频,每行結(jié)尾是“<換行><回車>”,即“\n\r”算墨;Mac系統(tǒng)里宵荒,每行結(jié)尾是“<回車>”。
1. 問題描述:
在windows下寫的文件上傳到Linux服務(wù)器之后,文件中多出了很多^M符號
2. 原因分析:
Linux和windows的文本中,對換行方式處理不同:
'\n' 10 換行(newline)
'\r' 13 回車(return)
系統(tǒng) | 換行方式 |
---|---|
Windows | 結(jié)尾是<換行><回車>,即“\n\r” |
linux/unix | 結(jié)尾是<換行>,即 “\n” |
Mac系統(tǒng) | 結(jié)尾是<回車>,即“\r” |
所以windows下的文件报咳,在Linux中會(huì)有^M侠讯,即回車符號
參考:回車符和換行符的區(qū)別
3.解決辦法:
解決辦法主要以下幾個(gè)方案:
注意: ^M要用Ctrl+v,<回車>代替
命令 |
---|
1. vim 中使用替換命令::%s/^M//g
|
2. 使用sed:sed 's/^M//' filename > newfile
|
3. 使用tr刪除“\r”:tr -d "\r" filename
|
4. 使用dos2unix命令:dos2unix filename
|
5. 在vim下::set ff = unix (把dos文件類型變?yōu)閡nix) |
此外暑刃,也可以使用sed把win文檔轉(zhuǎn)化為Linux下文檔:
find . -type f print0 | xargs -0 sed -i 's/^M$//'
其中實(shí)踐中試驗(yàn)了第一種方法厢漩,舉例說明該命令的含義:
將文件中的 a 全部替換為b,可以使用:%s/a/b/g
參考:
去掉Linux中刪除^M符號的方法
vim如何去掉^M字符