我试图使用bash中的一些东西向我显示打印而不是解释的文件中的行结束符。该文件是从SSIS/SQL Server中转储的,由Linux机器读入以进行处理。
在vi中有任何开关,少,多,等等? 除了看到行结束符,我还需要知道它是什么类型的行结束符(CRLF或LF)。我怎么知道呢?
我试图使用bash中的一些东西向我显示打印而不是解释的文件中的行结束符。该文件是从SSIS/SQL Server中转储的,由Linux机器读入以进行处理。
在vi中有任何开关,少,多,等等? 除了看到行结束符,我还需要知道它是什么类型的行结束符(CRLF或LF)。我怎么知道呢?
当前回答
尝试file,然后file -k,然后dos2unix -ih
文件通常就足够了。但对于困难的情况,请尝试file -k或dosunix -ih。
下面的细节。
试试file -k
简短的版本:file -k somefile.txt会告诉你。
它将输出CRLF行结束符用于DOS/Windows行结束符。 它将输出MAC行结束符的CR行结束符。 它只输出Linux/Unix“LF”行结束符的文本。(所以如果它没有明确提到任何类型的行结束符,那么这意味着:“LF行结束符”。)
长版本见下文。
真实世界的例子:证书编码
我有时需要检查PEM证书文件。
常规文件的问题是:有时它试图太聪明/太具体。
让我们做个小测试:我有一些文件。其中一个文件有不同的行尾。哪一个?
(顺便说一下:这是我的一个典型的“证书工作”目录。)
让我们尝试常规文件:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
嗯。它没有告诉我行将结束。我已经知道那些是认证文件。我不需要“档案”来告诉我这些。
一些网络设备对它们的证书文件的编码方式非常非常挑剔。所以我才需要知道。
你还能尝试什么?
你可以尝试使用dos2unix的——info开关,像这样:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
这告诉你,是的,"0。example。end。Cer "一定是个另类。但是行尾是什么样的呢?你能记住dos2unix输出格式吗?(我不喜欢。)
但幸运的是,文件中有——keep-going(简称-k)选项:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
太好了!现在我们知道奇数文件有DOS (CRLF)行结束符。(其他文件有Unix (LF)行结束符。这在输出中不是显式的。它是隐式的。这只是文件期望“常规”文本文件的方式。)
(如果你想分享我的记忆:“L”代表“Linux”和“LF”。)
现在让我们转换罪魁祸首,再试一次:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
很好。现在所有的cert都有Unix行结束符。
试试2unix -ih
当我写上面的例子时,我并不知道这一点,但是:
实际上,如果你使用-ih(——info=h的缩写),dos2unix会给你一个标题行,就像这样:
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
还有一个“实际上”的时刻:标题的格式真的很容易记住:这里有两个助记符:
它是DUMB(从左到右:d代表Dos, u代表Unix, m代表Mac, b代表BOM)。 还有:“DUM”只是D, U和M的字母顺序。
进一步的阅读
人文件 男人dos2unix 维基百科:换行符
其他回答
要在less中将CR显示为^M,请使用less -u或在less打开时键入-u。
Man less说:
-u或——下划线-特殊 导致退格和回车被视为打印 能力特征;也就是说,它们被发送到终端时 它们出现在输入中。
可以使用命令todos filename转换为DOS结尾,使用命令fromdos filename转换为UNIX行结尾。要在Ubuntu上安装软件包,输入sudo apt-get install tofrodos。
You can use vim -b filename to edit a file in binary mode, which will show ^M characters for carriage return and a new line is indicative of LF being present, indicating Windows CRLF line endings. By LF I mean \n and by CR I mean \r. Note that when you use the -b option the file will always be edited in UNIX mode by default as indicated by [unix] in the status line, meaning that if you add new lines they will end with LF, not CRLF. If you use normal vim without -b on a file with CRLF line endings, you should see [dos] shown in the status line and inserted lines will have CRLF as end of line. The vim documentation for fileformats setting explains the complexities.
另外,我没有足够的点来评论notepad++的答案,但如果你在Windows上使用notepad++,使用查看/显示符号/显示行结束菜单来显示CR和LF。在本例中显示LF,而对于vim, LF由新行表示。
尝试file,然后file -k,然后dos2unix -ih
文件通常就足够了。但对于困难的情况,请尝试file -k或dosunix -ih。
下面的细节。
试试file -k
简短的版本:file -k somefile.txt会告诉你。
它将输出CRLF行结束符用于DOS/Windows行结束符。 它将输出MAC行结束符的CR行结束符。 它只输出Linux/Unix“LF”行结束符的文本。(所以如果它没有明确提到任何类型的行结束符,那么这意味着:“LF行结束符”。)
长版本见下文。
真实世界的例子:证书编码
我有时需要检查PEM证书文件。
常规文件的问题是:有时它试图太聪明/太具体。
让我们做个小测试:我有一些文件。其中一个文件有不同的行尾。哪一个?
(顺便说一下:这是我的一个典型的“证书工作”目录。)
让我们尝试常规文件:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
嗯。它没有告诉我行将结束。我已经知道那些是认证文件。我不需要“档案”来告诉我这些。
一些网络设备对它们的证书文件的编码方式非常非常挑剔。所以我才需要知道。
你还能尝试什么?
你可以尝试使用dos2unix的——info开关,像这样:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
这告诉你,是的,"0。example。end。Cer "一定是个另类。但是行尾是什么样的呢?你能记住dos2unix输出格式吗?(我不喜欢。)
但幸运的是,文件中有——keep-going(简称-k)选项:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
太好了!现在我们知道奇数文件有DOS (CRLF)行结束符。(其他文件有Unix (LF)行结束符。这在输出中不是显式的。它是隐式的。这只是文件期望“常规”文本文件的方式。)
(如果你想分享我的记忆:“L”代表“Linux”和“LF”。)
现在让我们转换罪魁祸首,再试一次:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
很好。现在所有的cert都有Unix行结束符。
试试2unix -ih
当我写上面的例子时,我并不知道这一点,但是:
实际上,如果你使用-ih(——info=h的缩写),dos2unix会给你一个标题行,就像这样:
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
还有一个“实际上”的时刻:标题的格式真的很容易记住:这里有两个助记符:
它是DUMB(从左到右:d代表Dos, u代表Unix, m代表Mac, b代表BOM)。 还有:“DUM”只是D, U和M的字母顺序。
进一步的阅读
人文件 男人dos2unix 维基百科:换行符
您可以使用文件实用程序来指示行结束符的类型。
Unix:
$ file testfile1.txt
testfile.txt: ASCII text
“DOS”:
$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators
将“DOS”转换为Unix:
$ dos2unix testfile2.txt
从Unix转换到DOS:
$ unix2dos testfile1.txt
转换一个已经转换的文件没有效果,所以盲目运行是安全的(即不先测试格式),尽管通常的免责声明适用,一如既往。