CRLF, LF 是用来表示文本换行的方式。CR(Carriage Return) 代表回车,对应字符 '\r';LF(Line Feed) 代表换行,对应字符 '\n'。不同的操作系统文本使用的换行符各不相同。

Windows 系统使用的是 CRLF, Unix系统(包括Linux, MacOS近些年的版本) 使用的是LF。

区分识别换行符

那么如何在命令行中,显示区分到底使用的是那个换行符,是CRLF,还是LF?可以使用下面几种工具:

  • less
  • cat
  • file

1. file -k

通过命令 file -k demo.txt .

  • 对于DOS/Windows 换行符, 会输出: with CRLF line terminators

  • 对于MAC换行符,会输出:with LF line endings

  • 对于Linux/Unix ”CR“, 则只会输出 text

2. cat -e

cat -e 将Linux/Unix 换行符(\n 或 LF) 显示成 $, Dos/Windows换行符(\r\n 或者 CRLF)显示成 ^M$, 如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--CRLF
$ cat -e 2020654103_2020-12-18.csv
LQH2HPN4R7MDRL,63036NC00-015-G,EY00875,2020654103,12000,12000^M$
DLW21HN900SQ2L,720400201-015-H,EY00H61,2020653533,300000,300000^M$
DLW21HN181SQ2L,720402M00-015-H,IZ00091,2020653533,18000,18000^M$

#LF
$ cat -e 2020654103_2020.csv
DLW21HN181SQ2L,720402M00-015-H,IZ00091,2020653533,18000,18000$
DLW21HN670HQ2L,720406000-015-H,IZ00339,2020653533,60000,60000$
DLW21HN670HQ2L,720406000-015-H,IZ00408,2020653533,24000,24000$

3. less -u

通过less -u 命令可以将 CR 显示成 ^M

man less:

1
2
3
4
5
-u or --underline-special

      Causes backspaces and carriage returns to be treated  as  print-
      able  characters;  that  is,  they are sent to the terminal when
      they appear in the input.

将DOS换行符转换成Unix换行符(NeoVim/Vim)

  • dos2unix 是一个实用命令行工具,可以完成这个操作
  • set ff=unix 或者 set fileformat=unix 进行命令修改
  • :%s/\r//g