Vscode DOS和UNIX指令碼檔案之間相互轉換的多種方法
阿新 • • 發佈:2018-11-16
DOS和UNIX指令碼檔案之間的轉換
在windows上編寫的shell、python等指令碼在Linux上無法正常的執行,會有如下提示:
- shell: bash: ./print.sh: /bin/bash^M: bad interpreter: No such file or directory
- python:
在Linux上使用vim開啟檔案,顯示很多的^M字元,主要是因為在Windows下換行使用CRLF兩個字元來表示,其中CR為回車(ASCII=0x0D),LF為換行(ASCII=0x0A),而在Linux下使用LF一個字元來表示。在Linux下使用vim來檢視一些Windows下建立的指令碼檔案時,會發現在每一行尾部有^M字元,其實它是顯示CR回車字元。
在Unix/Linux下可以使用file命令檢視檔案型別(file print.sh),如下:
- print.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
vscode
在檔案編輯視窗,點選右下角的CRLF(選擇行尾序列),然後選擇LF儲存檔案。
開啟行尾序列修改選項
選擇LF後儲存檔案
dos2unix
- 安裝
yum install dos2unix 或 sudo apt-get install dos2unix - 使用
- DOS轉UNIX
dos2unix print.sh
- UNIX轉DOS
unix2dos print.sh
- DOS轉UNIX
perl
Perl是相當直接,你新增或刪除掉檔案每行結尾的CR字元。
- DOS轉UNIX
perl -p -e 's/\r$//' print.sh > print_unix.sh
- UNIX轉DOS
perl -p -e 's/\n$/\r\n/' print_unix.sh > print.sh
vim
vim print.sh
DOS轉UNIX
:setfileformat=unix
或:set ff=unix
UNIX轉DOS
:setfileformat=dos
或:set ff=dos
- 儲存
:wq
awk
- DOS轉UNIX
awk '{sub("\r$", "", $0);print $0}' print.sh > print_unix.sh
- UNIX轉DOS
awk '{sub("$", "\r", $0);print $0}' print_unix.sh > print.sh
sed
- DOS轉UNIX
sed -i 's/.$//g' print.sh
- UNIX轉DOS
sed -i 's/$/\r/g' print.sh
tr
- DOS轉UNIX
tr -d '\r' < print.sh > print_unix.sh