Windows和Linux的换行符CRLF/LF(\r\n,\n)简介

这篇具有很好参考价值的文章主要介绍了Windows和Linux的换行符CRLF/LF(\r\n,\n)简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题:

有的时候, 我们把一个在windows上修改过的文件拿到linux上用vim打开之后,每行末尾会出现多余的字符 "^M",这是怎么回事呢?

linux 换行符,linux,linux,windows,bash

1.CR/LF介绍

CR是Carriage-Return的缩写,即回车;

LF是Line-Feed的缩写,即换行。

CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作。

在每一行的末端,CR命令让打印头回到左边。LF命令让纸前进一行。

虽然使用卷纸的终端时代已经过去了,但是,CR和LF命令依然存在,许多应用程序和网络协议仍使用这些命令作为分隔符。

Linux(unix) 和 mac 默认使用 "\n" 作为换行符;

Windows 默认使用 "\r\n" 作为换行符;

2.Unix(Linux)的换行符

Linux 下换行符是 "\n"。

linux 换行符,linux,linux,windows,bash

"\n" 在 ACSII表中 对应 LF , ACSII值为 10 ,即0x0a (16进制) 

 

3.windows下换行符

windows 下换行符是 "\r\n"。

linux 换行符,linux,linux,windows,bash

"\r" 在ACSII表中对应 "CR", ACSII值为 13 ,即0x0d (16进制)  。

"\r" 在vim中被解释为 "^M" 。

4. unix/windows格式换行符转换

4.1 在linux上可以使用以下工具进行转换

  1. dos2unix : 将windows风格换行符转换为unix风格换行符
  2. unix2dos:  将unix风格换行符转换为windows风格换行符

linux 换行符,linux,linux,windows,bash

4.2 在windows上CRLF和LF的转换

4.2.1 使用dos2unix/unix2dos 转换

下载windows版本的 dos2unix/unix2dos,

dos2unix - Browse /dos2unix/7.5.1 at SourceForge.net

使用方法参考dos2unix工具中

dos2unix-7.5.1-win64-nls/share/doc/dos2unix-7.5.1/dos2unix.htm

example 和 RECURSIVE CONVERSION 章节

(见附录2)

4.2.2 在windows上常用的代码编辑器一般都支持CRLF和LF的转换

比如说 VsCode,  在右下角可以选择 LF 或者CRLF;

其他编辑器的操作大同小异。

linux 换行符,linux,linux,windows,bash

需要默认设置的话, 在设置里修改

linux 换行符,linux,linux,windows,bash

5. git中关于换行符的一些配置

5.1 core.autocrlf

core.autocrlf 选项有三个可选值:

  • true : 提交时改成LF,检出时改成CRLF
  • false (默认值): 提交时是什么就是什么,不改换行符,检出时也不改
  • input:  提交时改成LF,检出时不改

5.2 core.eol

core.eol 选项用于指定文件的行尾样式

  • lf :使用 LF 作为行尾样式。
  • crlf:使用 CRLF 作为行尾样式。
  • native (默认值):使用操作系统的默认行尾样式。

5.3 core.safecrlf

core.safecrlf 选项用于防止混合换行符的错误。它有三个可选值:

  • false: 关闭检查,允许混合换行符的错误。
  • warn (默认值):开启检查,并在发现混合换行符的错误时打印警告信息。
  • true:开启检查,并在发现混合换行符的错误时打印错误信息并拒绝提交。

5.4 git配置建议

一些查看git配置的命令

# 查看 git config 配置
git config -l

# 查看 git config 配置具体位置
git config --list --show-origin

# 全局配置
git config --global core.autocrlf true

5.4.1

开发环境:windows

代码编译/运行环境: windows

建议配置 : core.autocrlf = true

5.4.2

开发环境:windows

代码编译/运行环境: Linux / Mac

建议配置 : core.autocrlf = input

5.4.3

开发环境:Linux / Mac

代码编译/运行环境: Linux / Mac

建议配置 : core.autocrlf = false (保持默认配置)

5.4.4

开发环境:Linux / Mac

代码编译/运行环境: Windows

建议配置 : core.autocrlf = true

个人配置是保持默认配置,

个人工作情况是:

99%概率在linux提交,运行在linux的代码;

有极小概率可能在linux上提交bat脚本;

 因此保持默认配置。

针对在linux环境提交的bat脚本,手动转换为 CRLF格式。

附录1. ASCII 码表

linux 换行符,linux,linux,windows,bash

附录2 . dos2unix 使用方法介绍

EXAMPLES
    Read input from 'stdin' and write output to 'stdout':

        dos2unix < a.txt
        cat a.txt | dos2unix

    Convert and replace a.txt. Convert and replace b.txt:

        dos2unix a.txt b.txt
        dos2unix -o a.txt b.txt

    Convert and replace a.txt in ascii conversion mode:

        dos2unix a.txt

    Convert and replace a.txt in ascii conversion mode, convert and replace
    b.txt in 7bit conversion mode:

        dos2unix a.txt -c 7bit b.txt
        dos2unix -c ascii a.txt -c 7bit b.txt
        dos2unix -ascii a.txt -7 b.txt

    Convert a.txt from Mac to Unix format:

        dos2unix -c mac a.txt
        mac2unix a.txt

    Convert a.txt from Unix to Mac format:

        unix2dos -c mac a.txt
        unix2mac a.txt

    Convert and replace a.txt while keeping original date stamp:

        dos2unix -k a.txt
        dos2unix -k -o a.txt

    Convert a.txt and write to e.txt:

        dos2unix -n a.txt e.txt

    Convert a.txt and write to e.txt, keep date stamp of e.txt same as
    a.txt:

        dos2unix -k -n a.txt e.txt

    Convert and replace a.txt, convert b.txt and write to e.txt:

        dos2unix a.txt -n b.txt e.txt
        dos2unix -o a.txt -n b.txt e.txt

    Convert c.txt and write to e.txt, convert and replace a.txt, convert and
    replace b.txt, convert d.txt and write to f.txt:

        dos2unix -n c.txt e.txt -o a.txt b.txt -n d.txt f.txt

RECURSIVE CONVERSION
    In a Unix shell the find(1) and xargs(1) commands can be used to run
    dos2unix recursively over all text files in a directory tree. For
    instance to convert all .txt files in the directory tree under the
    current directory type:

        find . -name '*.txt' -print0 |xargs -0 dos2unix

    The find(1) option "-print0" and corresponding xargs(1) option -0 are
    needed when there are files with spaces or quotes in the name. Otherwise
    these options can be omitted. Another option is to use find(1) with the
    "-exec" option:

        find . -name '*.txt' -exec dos2unix {} \;

    In a Windows Command Prompt the following command can be used:

        for /R %G in (*.txt) do dos2unix "%G"

    PowerShell users can use the following command in Windows PowerShell:

        get-childitem -path . -filter '*.txt' -recurse | foreach-object {dos2unix $_.Fullname}

参考资料:

CRLF_百度百科

百度百科-CRLF

【git系列4/4】如何设置core.autocrlf | core.safecrlf (配置值的含义及最佳实践)

【git系列4/4】如何设置core.autocrlf | core.safecrlf (配置值的含义及最佳实践)-CSDN博客

Git 自动换行符 (autocrlf) 输入是将换行符从 LF 转换为 CRLF 吗

Git 自动换行符 (autocrlf) 输入是将换行符从 LF 转换为 CRLF 吗|极客笔记

Shell脚本中^M的问题和解决方案

Shell脚本中^M的问题和解决方案-CSDN博客

Sourceforge-dos2unix

https://sourceforge.net/projects/dos2unix文章来源地址https://www.toymoban.com/news/detail-775211.html

到了这里,关于Windows和Linux的换行符CRLF/LF(\r\n,\n)简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2024年02月15日
    浏览(39)
  • 【bug记录】-Linux与Windows中的文件换行符不同导致的格式问题

    当你从Windows移动文件到Linux系统时,可能会遇到文件格式问题。这通常涉及到文本文件的换行符(line endings)格式。 在Windows中,换行符是\\\"rn\\\"(Carriage Return + Line Feed) 而在Linux中,换行符是\\\"n\\\"(Line Feed)。 解决这个问题的方法之一是使用工具来转换文本文件的换行符格式。

    2024年02月04日
    浏览(48)
  • chatgpt赋能python:Python去除换行符\n的方法

    如果您在使用Python处理文本数据时,经常遇到换行符n的问题,那么本文将为您介绍几种Python去除换行符n的方法,并为您提供实际案例。这些方法包括使用replace、strip、split和正则表达式等,让您可以更加灵活地处理文本数据。 使用replace方法去除n 介绍 Python中的replace方法可

    2024年02月05日
    浏览(52)
  • 【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行

    最近开发vue2 项目 ,接口返回的是类似于这样的数据: 我是第一行的哦n我是第二行的哦 我是直接这样渲染的, 但结果却是不如意,变成了下面这样 1.在使用 v-html 时添加样式,white-space:pre-wrap ,让浏览器保留空白和换行符。 2、用 pre 标签包裹 被包围在 pre 标签中的文本通常

    2024年02月14日
    浏览(38)
  • 一张表格讲明白white-space属性。html如何识别\n\r,让这些特殊换行符换行。

    大多数标签在展示文本内容的时候都会默认把文本中的空白和换行符去掉,这的确大大的使得文本的排版更加美观了,也怎加了区域的利用率,可是就有一些需求是需要原原本本的展示出原汁原味的文本格式。那该如何展示出文本的内在格式呢?无外乎把不该去掉的空格展示

    2024年02月14日
    浏览(38)
  • 前端处理后端返回的数据中有\n\n字样的换行符标识

    后端返回的数据: 上面圈着的部分就是n,前端需要将数据进行换行,对于这类型的数据,在前端页面是需要进行稍微处理才能正常显示。如果没有经过处理,那么内容是不会在有换行符的位置进行换行显示的 解决办法1: 使用css属性: pre-wrap:连续的空白符会被保留。在遇到

    2024年02月07日
    浏览(39)
  • windows中的换行符

    用连续两个换行符来分隔文本 Regex reg = new Regex(@\\\"nn\\\"); string[] s = reg.Split(this.richtextbox1.text); 结果正常 Regex reg = new Regex(@\\\"nn\\\"); string[] s = reg.Split(System.IO.File.ReadAllText(txtfilepath)); 没有达到分割效果 所以稳定起见改成Regex reg = new Regex(@\\\"(nn)|(rnrn)\\\");就OK了

    2023年04月09日
    浏览(52)
  • C语言中输入函数scanf在使用中不能加上换行符号\n

    (1)是一种输入函数。 (2)以vs编译器为例,vs编译器不提供该函数这样的写法,在使用中,需要先声明定义。在主函数前定义,如下: #define _CRT_SECURE_NO_WARNINGS 1 下面以一个题目举例:      题目为  计算n的阶乘 (1)错误的示范: (2)错误分析  要输入2次,为什么? (

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

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

    2023年04月14日
    浏览(52)
  • uni-app开发微信小程序数据 \n 换行符失效问题

    前言 使用uni-app开发微信小程序时,使用text显示字符串(字符串带n),需要在n处直接换行。 1、本地字符串,可以直接换行显示。 2、后台返回字符串,直接换行失效。原因:渲染时 n 直接被当成字符串处理了,根本不识别。 效果图       实现 1、使用replace()方法,字符

    2024年02月15日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包