linux如何在行尾添加文字,关于linux:如何在文本文件中找出行尾?

我试图在bash中使用一些东西来显示打印而不是解释的文件中的行尾。 该文件是SSIS / SQL Server的转储文件,正在被Linux机器读入以进行处理。

vi,less,more等中是否有任何开关?

除了查看行尾之外,我还需要知道行尾的类型(CRLF或LF)。 我如何找到答案?

一般提示:如果您对可以使用哪个* nix / cygwin命令有所了解,则始终可以查看其手册页以搜索可能会提供所需功能的开关。 例如man less。

您可以使用file实用程序来指示行尾的类型。

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

转换已转换的文件没有任何效果,因此可以安全地盲目运行(即,无需先测试格式),尽管通常适用免责声明。

现在,它们有时有时分别称为" fromdos"和" todos"(在Ubuntu 10.4+中就是这种情况)

@JessChadwick:是的,但是仅当您明确地将tofrodos软件包与sudo apt-get install tofrodos一起安装时-就像您必须运行sudo apt-get install dos2unix来获取dos2unix和unix2dos一样。

Actully dos2unix无法完成所有工作,我认为stackoverflow.com/questions/23828554/dos2unix-doesnt-convert-m提供了最佳答案

@nathan:dos2unix的失败之处是什么?该问题的OP仅模糊地描述了该问题。

在dos2unix命令之前和之后的@DennisWilliamson文件命令获得相同的输出:xxx.c C源代码,ASCII文本,带有CR,LF行终止符。我发现此c文件的行中间有^ M,它喜欢xxxxxxx ^ M xxxxxxx

只是为了说明一下,在debian jessie上,您可能需要安装file软件包才能首先使用file命令。

在vi中...

:set list查看行尾。

:set nolist恢复正常。

虽然我认为您无法在vi中看到或

,但是您可以看到它是哪种文件类型(UNIX,DOS等),以推断它具有哪些行结尾...

:set ff

或者,可以从bash使用od -t c或仅使用od -c显示退货。

谢谢-这确实有效-现在我正在尝试告诉它 n或 r n是否在Vi中有其他开关?

不幸的是,我不认为vi可以显示这些特定字符。您可以尝试od -c ,我相信它将显示 n或 r n。

在"其价值所在"类别中,您可以通过发出grep --regex =" ^ M"来为Dos样式CRLF grep,其中^ M为CTRL + V CTRL + M。您可以通过用sed命令替换它们来删除它们。这与dos2unix基本上具有相同的作用

在vim中::set fileformat将报告unix或dos中的哪个vim认为文件行结尾在其中。您可以通过:set fileformat=unix进行更改。

在启动vi / vim时使用-b标志,然后使用:set列表查看CR(^ M)和LF($)的结尾。

@RyanBerger-好像您缺少-t。它应该是od -t c filepath,但是感谢新程序。很棒!

@RyanBerger,您应该编辑答案以包含" od -c"。我遇到的第一件事只是显示了回报。谢谢。

实用程序命令od应该是对此票证的正确答案。

请注意,由Vim推断(并由:set fileformat报告)的文件格式更倾向于报告unix,即仅当文件中的每一行以CRLF作为其行尾时才报告dos,否则将其报告为unix格式文件。如果您认为该文件可能是这些混合的行尾可憎的内容之一,则vim不能告诉您哪些行具有和哪些行具有。

在bash shell中,尝试cat -v。这应该显示Windows文件的回车符。

(这在Windows XP上通过Cygwin在rxvt中为我工作)。

编者注:cat -v可视化(CR)字符。如^M。因此,行尾

序列将在每个输出行的末尾显示为^M。 cat -e将另外可视化,即$。 (cat -et还将标签字符可视化为^I。)

@ChrisK:尝试echo -e abc

def

| cat -v,您应该在" def"之后看到^M。

我想查看文件是否具有^ M(Windows / DOS EOL),并且只有cat -v向我显示了该文件。为此+1

使用cat(GNU coreutils)8.21在14.04中没有骰子

^ M = DOS / Windows风格

Ubuntu 14.04:

简单的cat -e效果很好。

这将Unix行结束符(或LF)显示为$,而Windows行结束符(

或CRLF)显示为^M$。

也适用于OSX。好的解决方案。简单并为我工作,而被接受的答案却没有。 (注意:不是.txt文件)

在Windows上也可以使用git bash

对于macOS来说效果很好,谢谢!

M $的显示是否是复活节彩蛋/窗户扑打?

不适用于Solaris,但有人说应该可以使用

要将CR显示为较少的^M,请使用less -u或键入一次-u,然后再打开一次。

man less说:

-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.

请阐明您的答案。

您可以使用xxd显示文件的十六进制转储,并搜索" 0d0a"或" 0a"字符。

您可以按照@warriorpostman的建议使用cat -v。

使用cat(GNU coreutils)8.21在14.04中没有骰子

它适用于cat v 8.23。 Unix行尾将不打印任何额外的信息,但是DOS行尾将显示" ^ M"。

考虑到Im使用unix行尾,这肯定是Im在8.21中遇到的问题。

尝试"文件-k"

简短版本:file -k somefile.txt会告诉您。

它将为DOS / Windows行尾输出with CRLF line endings。

它将输出with LF line endings作为MAC线的结尾。

对于Linux / Unix行" CR",它将仅输出text。 (因此,如果未明确提及任何类型的line endings,则这意味着:" CR行尾"。)

长版请参见下文。

实际应用:证书编码

有时我必须检查一下PEM证书文件。

常规file的问题是:有时它试图变得太聪明/太具体了。

让我们尝试一些测验:我有一些文件。这些文件之一具有不同的行尾。哪一个?

(顺便说一句:这是我典型的"证书工作"目录之一)。

让我们尝试常规file:

$ 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

嗯这不是在告诉我行尾。而且我已经知道这些是证书文件。我不需要"文件"来告诉我。

您还能尝试什么?

您可以使用--info开关尝试dos2unix,如下所示:

$ 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输出格式? (我不。)

但是幸运的是,在file中有--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)行尾。在此输出中不是显式的。它是隐式的。这只是file期望"常规"文本文件的方式。)

(如果您想共享我的助记符:" 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

好。现在所有证书都有Unix行尾。

进一步阅读

man file

man dos2unix

维基百科:换行符

您可以使用vim -b filename以二进制模式编辑文件,该文件将显示^ M个字符以返回回车符,并且换行符表示LF存在,表示Windows CRLF行尾。 LF表示,CR表示。请注意,当您使用-b选项时,默认情况下始终会在UNIX模式下编辑文件,如状态行中的[unix]所示,这意味着,如果添加新行,它们将以LF而不是CRLF结尾。如果在带有CRLF行尾的文件上使用不带-b的普通vim,则应该在状态行中看到[dos],并且插入的行将CRLF作为行尾。 fileformats设置的vim文档说明了复杂性。

此外,我没有足够的要点来评论Notepad ++答案,但是如果您在Windows上使用Notepad ++,请使用"查看/显示符号/显示行尾"菜单来显示CR和LF。在这种情况下,显示了LF,而对于vim,LF用新的线表示。

您可以使用命令todos filename转换为DOS结尾,并使用fromdos filename转换为UNIX行结尾。要在Ubuntu上安装软件包,请键入sudo apt-get install tofrodos。

我将输出转储到文本文件中。然后,我在记事本++中打开它,然后单击"显示所有字符"按钮。不是很优雅,但可以。

这个问题被标记为Linux,我不认为notepad ++适用于Linux。这应该适用于Windows。

notepadqq等同于Linux的notepad ++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值