实际上我不是在真正的 Ubuntu 中。我是在Windows 10 上的 ubuntu.如果我在真正的 ubuntu 中,我可以使用此命令
ls >list.txt
获取一个文本文件。每行只包含一个项目(没有多余的空白)
但如果我在 Windows 磁盘中
cd /mnt/d/VirtualNes/
ls >list.txt
然后我得到一个纯文本文件一条线
那么如何获取一个每行只包含一个项目而没有空白的文件呢?
答案1
当我们有机械打字机时……
有两件事,
- 回车键,当滚轮到达右边距时,将滚轮移回,
- 换行,即将滚轮向上移动,这样打字头就不会覆盖现有的行,而是在新行上书写。
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 中正确打开的新文件。
还有其他方法可以做到这一点,例如unix2dos
和dos2unix
实用程序。在 Ubuntu 中,您可以通过以下命令安装这两个实用程序:
sudo apt install dos2unix
看https://stackoverflow.com/questions/17579553/windows-command-to-convert-unix-line-endings和https://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 将正确显示该文件。