参考资料
在学习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 系统 |
也就是说
^K
^M
Win10自带的记事本无法查看换行符,我们使用 Notepad++ 来查看
⏹查看linux编辑的文本文件
⏹查看在linux中执行join a.txt b.txt > c.txt
后得到的错行的c.txt文件
⏹在 Notepad++ 中通过右下角的的换行符设置来转换为我们想要的换行符
如下图所示,通过 %s/^M//g
命令,替换为空白即可。
千万注意: 上述命令中的 ^M
并不是 先用键盘输入 ^
之后,再用键盘输入M
得到的字符^M
如果直接输入^M
来替换,默认替换是文本^M
,而不是换行符^M
。
⏹直接输入^M
的显示效果如下,可以看到^M
是白色的,表示此时的^M
只是普通的文本
⏹我们应该输入的是这种显示为蓝色的^M
,这个时候的^M
不是普通的文本。