Vscode DOS和UNIX脚本文件之间相互转换的多种方法
DOS和UNIX脚本文件之间的转换
在windows上编写的shell、python等脚本在Linux上无法正常的执行,会有如下提示:
- shell: bash: ./print.sh: /bin/bash^M: bad interpreter: No such file or directory
- python: : No such file or directory
在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