如何在同一行上打印多行输出?

Shr*_*rni 19 command-line scripts text-processing

有没有办法在同一行上打印多行输出(单输出)?

例如,如果输出是:

abc
def
qwerty
Run Code Online (Sandbox Code Playgroud)

是否可以打印:

abcdefqwerty 
Run Code Online (Sandbox Code Playgroud)

Dav*_*ter 15

您可以使用 删除给定集合中所有出现的字符tr -d。要删除换行符,请使用:

tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

与往常一样,您可以使用输入和输出重定向和管道来读取或写入文件和其他进程。

如果你想保留最后一个换行符,你可以简单地用echo或将它添加回来printf '\n',例如:

cat file1 file2... | { tr -d '\n'; echo; } > output.txt
Run Code Online (Sandbox Code Playgroud)


ter*_*don 10

很多方法。为了说明,我已将您的示例保存在file

$ cat file | tr -d '\n'
abcdefqwerty$ 
$ cat file | perl -pe 's/\n//'
abcdefqwerty$ 
Run Code Online (Sandbox Code Playgroud)

这将删除所有换行符,包括最后一个。你可能想要这样做:

$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
Run Code Online (Sandbox Code Playgroud)


des*_*ert 7

您可以通过管道传输多行输出 awk

awk '{printf "%s",$0} END {print ""}'
Run Code Online (Sandbox Code Playgroud)

或使用sed

sed ':a;N;$!ba;s/\n//g'
Run Code Online (Sandbox Code Playgroud)

示例运行

$ echo -e "1\n2\n3\n4" | awk '{printf "%s",$0} END {print ""}'
1234
$ echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n//g'              
1234
Run Code Online (Sandbox Code Playgroud)

进一步阅读:使用 AWK·serverfault.SE 删除换行符