正确的换行符让Linux和Windows愉快的玩耍

  • 原创
  • Madman
  • /
  • 2018-04-04 09:10
  • /
  • 0
  • 749 次阅读

Linux系统转换文本文件的换行符-min.png

Synopsis: 不同操作系统中的换行符标志不一样,在ASCII编码中以LF (NL line feed, new line)换行键和CR (carriage return)回车键来控制文本换行,即我们经常说的\n和\r。Windows下面保存的文本文件默认换行符是LFCR,而Linux是LF,所以Windows下面的文件放到Linux系统中无法被打开,本文介绍一些常用方法来查看当前文件使用的是哪种文本换行符,以及如何进行转换

1. 换行符

不同操作系统中的换行符标志不一样,在ASCII编码中以LF (NL line feed, new line)换行键CR (carriage return)回车键来控制文本换行,即我们经常说的\n\r

  • Unix和类Unix(如Linux): \n
  • Windows(MS-DOS): \r\n
  • Mac OS X: \n
  • Mac OS 9: \r

Windows文本在Linux中无法执行:

使用Windows系统中Sublime Text 3编辑器写的脚本传输到Linux中(不是复制内容),导致脚本无法运行

[root@CentOS ~]$ ./test.sh 
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

2. Linux查看文本换行符

2.1 cat命令

使用选项-A来显示换行符

[root@CentOS ~]$ cat -A test.sh 
#!/bin/bash^M$
# Author: Madman^M$
# Date: 2017/03/06^M$
# Email: wangy8961@163.com^M$
# Version: 1.0^M$
^M$
echo "Test shell file"^M$

2.2 vi/vim命令

使用选项-b以Binary mode打开文件,来显示换行符

[root@CentOS ~]$ vim -b test.sh 

#!/bin/bash^M
# Author: Madman^M
# Date: 2017/03/06^M
# Email: wangy8961@163.com^M
# Version: 1.0^M
^M
echo "Test shell file"^M
~                              

末行模式中输入:set list查看行结束符

#!/bin/bash^M$
# Author: Madman^M$
# Date: 2017/03/06^M$
# Email: wangy8961@163.com^M$
# Version: 1.0^M$
^M$
echo "Test shell file"^M$
~                                                                                                                             
:set list 

3. Windows换行符转换为Linux换行符

3.1 sed命令

sed命令用空白替换掉\r字符(即^M字符)即可

[root@CentOS ~]$ cat -A test.sh 
#!/bin/bash^M$
# Author: Madman^M$
# Date: 2017/03/06^M$
# Email: wangy8961@163.com^M$
# Version: 1.0^M$
^M$
echo "Test shell file"^M$

[root@CentOS ~]$ sed -i 's/\r//g' test.sh
或者:
[root@CentOS ~]$ sed -i 's/^M$//' test.txt  # Press "ctrl+v" followed "ctrl+m" to generate "^M" character. 

[root@CentOS ~]$ cat -A test.sh 
#!/bin/bash$
# Author: Madman$
# Date: 2017/03/06$
# Email: wangy8961@163.com$
# Version: 1.0$
$
echo "Test shell file"$

3.2 tr命令

下面命令行中的^M是通过ctrl + Vctrl + M输入的,特指\r字符

[root@CentOS ~]$ cat test.sh | tr -d "^M" > test_new.sh

[root@CentOS ~]$ cat -A test_new.sh 
#!/bin/bash$
# Author: Madman$
# Date: 2017/03/06$
# Email: wangy8961@163.com$
# Version: 1.0$
$
echo "Test shell file"$

3.3 dos2unix命令

1. 安装dos2unix软件包
[root@CentOS ~]$ yum install dos2unix

2. 转换
[root@CentOS ~]$ dos2unix test.sh 
dos2unix: converting file test.sh to Unix format ...

3. 脚本可以正常运行
[root@CentOS ~]$ ./test.sh 
Test shell file

3.4 vi/vim 命令

vivim打开文件(不要加-b选项),在末行模式下输入:set ff可以查看当前的文件风格,fileformat=dos代表Windows风格,fileformat=unix代表Unix风格。

:set ff=unix
:wq

保存即出,再次打开用:set ff查看会变成unix了,脚本可以正常运行

[root@CentOS ~]$ ./test.sh 
Test shell file

4. Linux换行符转换为Windows换行符

  • set ff=dos
  • unix2dos

5. Sublime Text 3默认使用Unix风格换行符

工具栏Preferences->Settings->User,在打开的配置文件中添加:

// 使用 unix 风格的换行符
"default_line_ending": "unix",
分类: Linux
标签: cat dos2unix LF LFCR sed tr vim
未经允许不得转载: LIFE & SHARE - 王颜公子 » 正确的换行符让Linux和Windows愉快的玩耍

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录