当我们有机械打字机时……

当我们有机械打字机时……

实际上我不是在真正的 Ubuntu 中。我是在Windows 10 上的 ubuntu.如果我在真正的 ubuntu 中,我可以使用此命令

ls >list.txt

获取一个文本文件。每行只包含一个项目(没有多余的空白)

但如果我在 Windows 磁盘中

cd /mnt/d/VirtualNes/
ls >list.txt

然后我得到一个纯文本文件一条线

那么如何获取一个每行只包含一个项目而没有空白的文件呢?

答案1

当我们有机械打字机时……

有两件事,

  1. 回车键,当滚轮到达右边距时,将滚轮移回,
  2. 换行,即将滚轮向上移动,这样打字头就不会覆盖现有的行,而是在新行上书写。

https://stackoverflow.com/questions/6521685/why-does-windows-use-cr-lf

以下是有关 CR 和 LF 代码的历史和一些细节的更详细说明:http://penguinpetes.com/b2evo/index.php?title=argh_microsoft_notepad_crlf_argh

即使在今天...

Windows 在每行末尾使用 CR/LF 代码,而 Ubuntu(一般为 Linux)仅使用 LF 代码。

当您打开由 Ubuntu、真实、虚拟或 Windows Subsystem for Linux (WSL) 生成的文本文件时,该文件看起来不错。当您在 Windows 中打开同一个文件时,所有行都连在一起。

你能做什么?

首先,验证 WSL 创建的文本文件是否确实在单独的行中有文件名:

cd /mnt/d/VirtualNes/
ls >list.txt
cat list.txt

最后一行在 Ubuntu 终端中显示 list.txt 的内容。您应该看到文件看起来不错。

Ubuntu 自带一个基于终端的文本编辑器 nano。你可以用它来代替记事本来编辑文本文件:

nano list.txt

另一方面,如果您在 Windows 中使用 notepad.exe 打开同一个文件,您将看到行乱七八糟。如果您在“真实”Ubuntu 中创建类似文件并在 Windows 中打开它,您将获得相同的结果。

如果您想在 Windows 中打开在 Ubuntu 中创建的文本文件,则必须将每行末尾的 LF 代码转换为 CR/LF 代码。您可以在 Windows CMD 提示符(而不是 Ubuntu 终端)中输入以下内容来执行此操作:

TYPE list.txt | MORE /P > win_list.txt

您将获得一个win_list.txt可以在 Windows 中正确打开的新文件。

还有其他方法可以做到这一点,例如unix2dosdos2unix实用程序。在 Ubuntu 中,您可以通过以下命令安装这两个实用程序:

sudo apt install dos2unix

https://stackoverflow.com/questions/17579553/windows-command-to-convert-unix-line-endingshttps://stackoverflow.com/questions/3891076/how-to-convert-windows-end-of-line-in-unix-end-of-line-cr-lf-to-lf了解更多信息。

希望这可以帮助

答案2

这是使用的副作用记事本。记事本是一个非常简单的二进制文件编辑器,它基于 ms-dos 的记事本应用程序。它要求使用 CR/LF 来换行,而不仅仅是 LF,就像 linux 和 linux 应用程序一样(因此,Windows 上的 Ubuntu 上的 Windows Subsystem for Linux/Bash)。因此,它会在一行上显示所有内容,因为它从未见过 CR/LF。

其他应用程序将正确读取它。Wordpad.exe 将按预期读取 ls 输出。Word 也是如此。或者 IE。或者 Chrome。或者过去十年设计的任何现代软件。

您可以解决这个问题记事本通过管道将其输送到转换器。

unix2dos 就是为此而设计的。或者使用其他命令,如 sed。例如:

ls | sed -e 's/\r*$/\r/' > list.txt

将在末尾的 LF 中添加 CR,然后 notpad 将正确显示该文件。

相关内容