参考资料
- 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
的方法如下