参考资料
- Linux—CRLF/CR/LF等回车换行符问题详解
- 改行コードCRはなぜ(^M)で\rなのか
- テキストファイルの行末に^Mが表示される
- 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是个啥?😵

😒如果我们的 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 | 
检索CR,LF后得到了如下表格。
| 名词 | 含义 | 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++ 来查看
⏹通过如下设置,显示出行尾符
 
⏹查看Window编辑的文本文件
 
⏹查看linux编辑的文本文件
 
 ⏹查看在linux中执行join a.txt b.txt > c.txt后得到的错行的c.txt文件
 
四. 去除 ^M
4.1 通过文本编辑器转换换行符
⏹在 Notepad++ 中通过右下角的的换行符设置来转换为我们想要的换行符

4.2 在linux中去除
如下图所示,通过 %s/^M//g 命令,替换为空白即可。
 💥千万注意: 上述命令中的 ^M并不是 先用键盘输入 ^之后,再用键盘输入M得到的字符^M
 如果直接输入^M来替换,默认替换是文本^M,而不是换行符^M。
 
⏹直接输入^M的显示效果如下,可以看到^M是白色的,表示此时的^M只是普通的文本

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

💪输入显示为蓝色的^M的方法如下
 



















