美文网首页Linux中国::开源热点 Linux中国::技术专栏
如何在 Linux 中删除文本中的回车字符

如何在 Linux 中删除文本中的回车字符

作者: Linux技术 | 来源:发表于2019-09-26 23:37 被阅读0次

当回车字符(Ctrl+M)让你紧张时,别担心。有几种简单的方法消除它们。

“回车”字符可以往回追溯很长一段时间 —— 早在打字机上就有一个机械装置或杠杆将承载纸滚筒的机架移到右边,以便可以重新在左侧输入字母。他们在 Windows 上的文本文件上保留了它,但从未在 Linux 系统上使用过。当你尝试在 Linux 上处理在 Windows 上创建的文件时,这种不兼容性有时会导致问题,但这是一个非常容易解决的问题。

如果你使用 od( 八进制转储(octal dump))命令查看文件,那么回车(也用 Ctrl+M 代表)字符将显示为八进制的 15。字符 CRLF 通常用于表示 Windows 文本文件中的一行结束的回车符和换行符序列。那些注意看八进制转储的会看到 \r\n。相比之下,Linux 文本仅以换行符结束。

这有一个 od 输出的示例,高亮显示了行中的 CRLF 字符,以及它的八进制。

$ od -bc testfile.txt 

0000000 124 150 151 163 040 151 163 040 141 040 164 145 163 164 040 146 

T   h   i   s       i   s       a       t   e   s   t       f 

0000020 151 154 145 040 146 162 157 155 040 127 151 156 144 157 167 163 

i   l   e       f   r   o   m       W   i   n   d   o   w   s 

0000040 056 015 012 111 164 047 163 040 144 151 146 146 145 162 145 156  <== 

.  \r  \n   I   t   '   s       d   i   f   f   e   r   e   n  <== 

0000060 164 040 164 150 141 156 040 141 040 125 156 151 170 040 164 145 

t       t   h   a   n       a       U   n   i   x       t   e 

0000100 170 164 040 146 151 154 145 015 012 167 157 165 154 144 040 142  <== 

x   t       f   i   l   e  \r  \n   w   o   u   l   d       b  <==

虽然这些字符不是大问题,但是当你想要以某种方式解析文本,并且不希望就它们是否存在进行编码时,这有时候会产生干扰。

3 种从文本中删除回车符的方法

幸运的是,有几种方法可以轻松删除回车符。这有三个选择:

dos2unix

你可能会在安装时遇到麻烦,但 dos2unix 可能是将 Windows 文本转换为 Unix/Linux 文本的最简单方法。一个命令带上一个参数就行了。不需要第二个文件名。该文件会被直接更改。

$ dos2unix testfile.txt 

dos2unix: converting file testfile.txt to Unix format...

你应该会发现文件长度减少,具体取决于它包含的行数。包含 100 行的文件可能会缩小 99 个字符,因为只有最后一行不会以 CRLF 字符结尾。

之前:

-rw-rw-r--   1 shs  shs        121 Sep 14 19:11 testfile.txt

之后:

-rw-rw-r--   1 shs  shs        118 Sep 14 19:12 testfile.txt

如果你需要转换大量文件,不用每次修复一个。相反,将它们全部放在一个目录中并运行如下命令:

$ find . -type f -exec dos2unix {} \;

在此命令中,我们使用 find 查找常规文件,然后运行 dos2unix 命令一次转换一个。命令中的 {} 将被替换为文件名。运行时,你应该处于包含文件的目录中。此命令可能会损坏其他类型的文件,例如除了文本文件外在上下文中包含八进制 15 的文件(如,镜像文件中的字节)。

sed

你还可以使用流编辑器 sed 来删除回车符。但是,你必须提供第二个文件名。以下是例子:

$ sed -e “s/^M//” before.txt > after.txt

一件需要注意的重要的事情是,请不要输入你看到的字符。你必须按下 Ctrl+V 后跟 Ctrl+M 来输入 ^M。s 是替换命令。斜杠将我们要查找的文本(Ctrl + M)和要替换的文本(这里为空)分开。

vi

你甚至可以使用 vi 删除回车符(Ctrl+M),但这里假设你没有打开数百个文件,或许也在做一些其他的修改。你可以键入 : 进入命令行,然后输入下面的字符串。与 sed 一样,命令中 ^M 需要通过 Ctrl+V 输入 ^,然后 Ctrl+M 插入 M。%s 是替换操作,斜杠再次将我们要删除的字符和我们想要替换它的文本(空)分开。 g(全局)意味在所有行上执行。

:%s/^M//g

总结

dos2unix 命令可能是最容易记住的,也是从文本中删除回车的最可靠的方法。其他选择使用起来有点困难,但它们提供相同的基本功能。

via: https://www.networkworld.com/article/3438857/how-to-remove-carriage-returns-from-text-files-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章

  • 如何在 Linux 中删除文本中的回车字符

    当回车字符(Ctrl+M)让你紧张时,别担心。有几种简单的方法消除它们。 “回车”字符可以往回追溯很长一段时间 —...

  • 一.文本函数

    一.文本函数 1.删除额外字符的函数 CLEAN从提供的文本字符串中删除所有不可打印的字符 TRIM删除文本字符串...

  • mac下常用终端命令

    1.vim 搜索关键词:/ 后输入查找的字符串,点回车,显示文本中第一个出现的字符串。?后输入查找的字符串,点回车...

  • cat命令

    ``` -A 参数 #查看文件所有内容,包括隐藏字符 ``` linux 中文件回车符识别为$ windows中编...

  • Linux指令全网最全4(练习题)

    四.练习题 1.如和通过命令行重启linux操作系统? 2.如何在命令行中快速删除光标前/后的内容? 3.如何删除...

  • JavaScript数据类型中易被忽略的点

    String 字符串中可以包含由反斜杠\和字符构成的特殊字符,如\n换行,\b 退格,\f 换页,\r回车,...

  • C++|文件读取输出

    读取文本 添加行数并输出 1、逐行读入 2、字符输入 忽略空格回车 字符读入 包含空格回车

  • Markdown 实例

    Markdown中的转义字符为\ 斜体:一个* 粗体:两个** 这是一条删除线 列表 文本 文本1 文本2 这是...

  • Excel如何快速删除指定的末尾文本

    在excel办公中,经常碰到快速删指定的末尾文本,如指定删除后面3个字符,那该如何做呢? 工具/原料 Excel ...

  • Linux基础知识之--文件命令规则,文件相关信息,文件类型

    Linux文件的命令规则 • 文件名最大为255个字符• 文件名中不能包括Linux特殊字符如“\”、“/”等(如...

网友评论

    本文标题:如何在 Linux 中删除文本中的回车字符

    本文链接:https://www.haomeiwen.com/subject/gyqouctx.html