在 Windows 上編輯的文件,放到 Linux 平台,有時會出現奇怪的問題,其中有一個是 ^M 引起的,例如這種錯誤:
/bin/bash^M: bad interpreter
這個問題相信大家也碰到過,原因是 Windows 和 Linux 關於換行的表達方式不同:
- Linux 的換行,在每一行的末尾只有一個換行符(LF)
\n
, 行尾以\n
來標識 - Windows 的換行,在每一行的末尾是 一個回車(CR)
\r
和一個換行符(LF)\n
和,行尾以\r\n
來標識
例如下圖,行尾有 ^M
這個 ^M
就是 Windows 平台下的回車 \r
, 在 Linux 下被 vim 解釋成了 ^M
.
這里提供幾種思路和方法來解決:
1. 使用 sed 替換
sed -e ‘s/.$//’ win.txt > unix.txt
.$ 來匹配行尾的字符(.不會匹配到\n),windows dos 格式的行尾就是
^M\n
;將^M
替換為空
- 使用
# cat -A win.txt
來檢查一下還有沒有^M
2. 使用 dos2unix
-
沒有就先安裝一下
yum install -y dos2unx
,大部分 Linux 發行版都有這個包
# dos2unix win.txt
-
使用
# cat -A win.txt
來檢查一下還有沒有^M
3. 利用 vim 處理
-
用 vim 打開文件后,可以查看下當前的文件系統格式:
:set ff?
-
然后可以更改格式:
set ff=unix
-
使用
# cat -A win.txt
來檢查一下還有沒有^M
參考鏈接:
[1] windows與unix文件格式轉換
[2] linux下使用vim編輯文件,出現^M是什么意思?