在 shell 中将垂直文本转换为水平文本

Lij*_*mas 2 shell text file-manipulation

我只是在 shell 中执行一些任务时思考这个问题。

如何转换.txt包含以下格式文本的文件[垂直方向]:

H
e
l
l
o

W
o
r
l
d
Run Code Online (Sandbox Code Playgroud)

注意:没有任何字母的行包含空格和 EOL

我需要转换为:

Hello World
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令:cat file1.txt |tr '\n' ' ' >file2.txt

输出:

H e l l o  W o r l d
Run Code Online (Sandbox Code Playgroud)

我怎样才能进一步进行?抱歉,如果这个问题已经出现了。如果是这样,请向我提供解决方案的链接或任何解决方法的命令。

fed*_*qui 5

您正在用空格替换新行。相反,使用以下命令删除它们-d

$ echo "H
> e
>                   # <- there is a space here
> W
> o" | tr -d '\n'
He Wo
Run Code Online (Sandbox Code Playgroud)

有一个文件:

tr -d '\n' < file   # there is no need to `cat`!
Run Code Online (Sandbox Code Playgroud)

这里的问题是最后一个新行被删除,因此结果是 POSIXly 的 0 行文件。