一文搞清UNIX/Linux与Windows文件换行符格式差异

这篇具有很好参考价值的文章主要介绍了一文搞清UNIX/Linux与Windows文件换行符格式差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 当一个文件在Windows和Linux上交替操作后,经常遇到一些莫名其妙的问题,如shell脚本无法执行,找不到shell脚本等问题,本文j谨就这一问题做一总结,供各位参考;
  • 本博客地址,https://blog.csdn.net/qxhgd,欢迎各位关注,转发请注明出处。

格式差异

  • 换行符是行尾 (EOL),是一个特殊的字符或字符序列,表示一行文本的结尾和新行的开头;
  • 表示换行符的实际代码因操作系统而异:
    – Microsoft Windows,DOS(MS-DOS,PC DOS等)使用CR + LF;
    – Unix和类Unix系统使用,包括Linux,OS X,FreeBSD等使用LF;
    – MAC系统里,使用CR;
  • CR即ASCII码的0x0D(\r),LF为ASCII码的0x0A(\n),DOS下使用(\r\n),类Unix系统下使用(\n),DOS系统下的’\r’在类Unix系统下会被显示为 ^M。

后文仅以test-dos.sh文件为例来说明,具体内容如下:

#!/bin/bash
echo "Hello World !"

格式影响

直观影响

  • Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行(由于Windows下编辑器的处理,这种情况一般不会发生);
  • 而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号;

功能影响

  • 在windows上编写的shell、python等脚本在Linux上⽆法正常的执⾏,会有 ^M 相关提⽰:
[qxhgd@localhost crlf]$ ./test-dos.sh
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
  • 如果在make编译的时候,执行mksh(一个shell文件)可能会有类似下面的提示:
make[3]: ./mksh: Command not found

格式查看

Windows下查看

  • 利用编辑器,如Visual Studio Code、UltraEdit、Notepad2等软件,如在状态栏显示为CR+LF则为Windows格式,如果显示为LF则为Linux格式:
    unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符
  • 利用支持扩展搜索的编辑器,如Notepad++,查找\r\n:
    unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符

Linux下查看

  • cat命令
    显示^M:
[qxhgd@localhost crlf]$ cat -v test-dos.sh
#!/bin/bash^M
echo "Hello World !"^M

显示Tab:

[qxhgd@localhost crlf]$ cat -T test-dos.sh
#!/bin/bash
^Iecho "Hello World !"
  • od命令
    od可以单独使用:
[qxhgd@localhost crlf]$ od -c test-dos.sh
0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n   e   c   h
0000020   o       "   H   e   l   l   o       W   o   r   l   d       !
0000040   "
0000041

也可以和cat配合使用:

cat test-dos.sh| od -c
  • hexdump命令
[qxhgd@localhost crlf]$ hexdump -c test-dos.sh
0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n   e   c   h
0000010   o       "   H   e   l   l   o       W   o   r   l   d       !
0000020   "
0000021
  • vim

状态栏下会显示:

“test-dos.sh” [noeol][dos] 2L, 33B

命令模式下执行set ff:

  fileformat=dos
  • gedit

– 首先使用gedit打开文件:

[qxhgd@localhost crlf]$ gedit test-dos.sh

– 搜索\r\n,如果搜索到了就表示是DOS格式:
unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符

格式修改

Windows下

  • 可以利用编辑器修改,如Visual Studio Code,点击状态栏右下方的CRLF,选择“行尾序列”可修改为LF的格式;

  • 有的编辑器,如Notepad2,有Line Endings可供选择:
    unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符

  • 利用支持扩展搜索的编辑器,如Notepad++,可将\r\n替换掉:
    unix换行符,1_____Linux技术_____,linux,windows,回车,换行,换行符

Linux下

利用特殊工具转换
  • vim
    vim命令模式下,执行set ff=unix或set fileformat=unix即可将DOS格式转换为unix格式;
  • dos2unix
    需要额外用命令安装,一般的Linux系统不带的;unix2dos与dos2unix作用正相反。
[qxhgd@localhost crlf]$ dos2unix test-dos.sh
dos2unix: converting file test-dos.sh to Unix format ...
[qxhgd@localhost crlf]$ dos2unix -n test-dos.sh test-unix.sh
dos2unix: converting file test-dos.sh to file test-unix.sh in Unix format ...
  • tofrodos
    这一组一共两个命令,todos和fromdos,fromdos用来将dos转换成unix格式,todos是用于将unix转换成dos格式的,使用例子如下:
[qxhgd@localhost crlf]$ fromdos test-dos.sh
利用文本处理工具
  • sed

– 转换一个文件:

sed ‘s/^M//’ test-dos.sh> test-unix.sh

– 转换多个文件:

find ./ -type f print0 | xargs -0 sed -i 's/^M$//'
  • vi

– 1、vi test-dos.sh
– 2、:%s/^M//g或:%s/\r//g
– 3、esc退出 :wq保存退出

其中^M 必须是同时按 Ctrl+V+M(按住Ctrl键,然后依次V、M键)或依次按Ctrl + V然后Ctrl + M,表示回车。

  • tr
tr -d "\015" test-dos.sh                  
cat test-dos.sh|tr -d ‘/r' > test-unix.sh 
tr -d '\r' < test-dos.sh > test-unix.sh
  • perl
cat test-dos.sh | perl -pe ‘~s/\r//g’ > test-unix.sh
perl -p -e 's/\r//g' test-dos.sh> test-unix.sh
perl -pi -e 's/\r\n/\n/g' test-dos.sh

如本文对你有些许帮助,欢迎大佬加关注、评论、点赞,有关必回关文章来源地址https://www.toymoban.com/news/detail-608997.html

到了这里,关于一文搞清UNIX/Linux与Windows文件换行符格式差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 换行符替换问题(window换行\r\n转linux换行\n)

    使用vim打开文件, 进入“末行模式”,输入 :set ff=unix 回车执行,告诉编辑器改为unix换行符 输入 :w 回车,完成保存 相关参考: linux环境中替换window换行符为linux换行符

    2024年02月16日
    浏览(26)
  • Git在Windows下 自动转换换行符 LF CRLF 的解决方案

    很多时候我们做开发是在Windows下,然后需要部署到Linux环境,但他们的换行符是不一样的,而Git默认的设置会开启转换,也就是文件在Git存储的时候都是LF ,然后我们在Win下拉代码,就会自动转换成CRLF,如果我们需要在Win下做调试,就很麻烦,而如果我们关闭自动转换,在代

    2024年02月15日
    浏览(39)
  • Hive学习:Hive导入字段带逗号和换行符的CSV文件

    比如上面这行数据,字段\\\"600,000,000,00\\\"带多个逗号,这个可以用hive中内置的语句来解决,使用OpenCSVSerde来解析CSV格式的数据,并指定了CSV文件中使用的分隔符、引号字符和转义字符 ‘separatorChar’ = ‘,’:指定CSV文件中使用的分隔符为逗号(,) ‘quoteChar’ = ‘\\\"’:指定CSV文件中

    2024年02月11日
    浏览(43)
  • Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    首先, 让我们看下数据 demo.txt , 就两行数据. 这种方法直接将所有的数据一次性读取出来, data的数据类型是一个字符串. 该方法读取的是一行内容, 然后是带换行符的, 所有会有空行, 后续会说明如何去掉换行符”n”. 这种方法返回的是一个列表, 注意换行符是包含在字符串的内

    2023年04月14日
    浏览(39)
  • git忽略换行符

    在 Git 仓库内配置 .git/info/attributes 文件 可以在 Git 仓库中新建一个名为 .git/info/attributes 的文件,并配置以下代码: 这样配置后,Git 就会将所有文件自动识别为文本文件,同时忽略换行符的变化。而且这种做法的好处在于,这个文件是在 Git 仓库内部定义,不会被共享提交到

    2024年02月13日
    浏览(36)
  • Git 中换行符问题处理

    实习入职第一周就中遇到了一个问题,代码中新增了 shell 脚本,但是放到服务器上执行时,发生了 shell 脚本执行错误,这个是由于不同 OS 系统换行符不同而引起的问题,导致DolphinScheduler调度任务失败,在此记录。 r (return):表示回车,就是回到本行的行首 n (newline):表示

    2024年02月03日
    浏览(30)
  • notepad++去除换行符和空格

    在notepad++中按Ctrl+h 1.去除换行符 输入如图所示的查找内容为rn,【替换为】不填写,勾选底部的【正则表达式】,然后点击【全部替换】 2. 按照逗号换行 输入如图所示的查找内容为,,【替换为】rn,勾选底部的【正则表达式】,然后点击【全部替换】   2.去除空格 在替换

    2024年02月12日
    浏览(52)
  • pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换

    一般来说,不同的开发环境和项目对换行格式的使用偏好不同: Windows平台 - 常用rn换行格式,因为这是Windows系统默认的换行方式。 Linux/Unix平台 - 更倾向于使用n换行格式,这是Linux/Unix系统的默认换行方式。 Mac OS - 早期使用r,但现代Mac也更常用n。 统一换行格式可以减少版本控

    2024年02月13日
    浏览(62)
  • Python如何换行】:使用换行符来实现多行代码的编写和阅读

    在Python中,有时候我们需要编写较长的代码行,为了提高可读性和美观性,我们可以使用换行符来将代码分成多行。下面我将详细介绍如何在Python中实现换行,并提供相应的源代码示例。 在Python中,我们可以使用反斜杠()作为换行符。当我们在一行代码中使用反斜杠作为

    2024年02月06日
    浏览(38)
  • go字符串去除首尾所有换行符

    原创不易,如果对你有帮助,欢迎给作者点个赞哦! 一键开启舒适、快捷: 调用: 效果:

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包