文本编辑 换行符CRLF/CR/LF问题

参考资料

  1. Linux—CRLF/CR/LF等回车换行符问题详解
  2. 改行コードCRはなぜ(^M)で\rなのか
  3. テキストファイルの行末に^Mが表示される
  4. Linux 替换^M字符 方法

目录

  • 一. 遇到的问题
  • 二. 换行符释义
  • 三. 换行符查看
  • 四. 去除 ^M
    • 4.1 通过文本编辑器转换换行符
    • 4.2 在linux中去除


一. 遇到的问题

在学习Linux的join命令时,我在win10上准备了2个文本文件,内容如下

✅a.txt

AAA BBB
CCC DDD

✅b.txt

AAA EEE
CCC FFF

通过WinSCP将上述2个文件放到linux中,执行join a.txt b.txt > c.txt的时候,理论上得到的c.txt内容如下

✅c.txt

AAA BBB EEE
CCC DDD FFF

但实际上得到的确是

✅c.txt

AAA BBB
 EEE
CCC DDD
 FFF

在linux上,使用vim命令查看,显示如下,可以看到 多了一个 ^M的符号。
这个 ^M是个啥?

文本编辑 换行符CRLF/CR/LF问题_第1张图片

如果我们的 a.txt 和 b.txt 都是在linux系统中通过vim编辑的话,执行 join a.txt b.txt > c.txt得到的c.txt是完全没有问题的。


二. 换行符释义

在谷歌日本上用linux ^M作为关键词搜索,得到了如下表格

通称 英語名 日本語名 アスキーコード 正規表現 表記
CR carriage return 復帰 0x0D \r ^M
LF line feed / newline / end-of-line / EOL 改行 0x0A \n ^K

检索CRLF后得到了如下表格。

名词 含义 ASCII字符 系统
CR Carriage Return,回车 \r Macintosh(早期的Mac OS)系统
LF Line Feed,换行 \n Unix/Linux/Mac OS X系统
CRLF Carriage Return & Line Feed`,回车并换行 \r\n Window系统

也就是说

  • Windos系统中用 CRLF 换行符
  • Linux系统中用 LF 换行符,标记为 ^K
  • 早期的Mac OS系统用 CR 换行符,标记为 ^M

三. 换行符查看

Win10自带的记事本无法查看换行符,我们使用 Notepad++ 来查看

⏹通过如下设置,显示出行尾符
文本编辑 换行符CRLF/CR/LF问题_第2张图片

⏹查看Window编辑的文本文件
文本编辑 换行符CRLF/CR/LF问题_第3张图片

⏹查看linux编辑的文本文件
文本编辑 换行符CRLF/CR/LF问题_第4张图片
⏹查看在linux中执行join a.txt b.txt > c.txt后得到的错行的c.txt文件
文本编辑 换行符CRLF/CR/LF问题_第5张图片

四. 去除 ^M

4.1 通过文本编辑器转换换行符

⏹在 Notepad++ 中通过右下角的的换行符设置来转换为我们想要的换行符

文本编辑 换行符CRLF/CR/LF问题_第6张图片

4.2 在linux中去除

如下图所示,通过 %s/^M//g 命令,替换为空白即可。
千万注意: 上述命令中的 ^M并不是 先用键盘输入 ^之后,再用键盘输入M得到的字符^M
如果直接输入^M来替换,默认替换是文本^M,而不是换行符^M
文本编辑 换行符CRLF/CR/LF问题_第7张图片

⏹直接输入^M的显示效果如下,可以看到^M是白色的,表示此时的^M只是普通的文本

在这里插入图片描述

⏹我们应该输入的是这种显示为蓝色的^M,这个时候的^M不是普通的文本。

在这里插入图片描述

输入显示为蓝色的^M的方法如下
文本编辑 换行符CRLF/CR/LF问题_第8张图片

你可能感兴趣的:(小知识,换行符)