有没有方法在同一行上打印多行输出(单行输出)?
例如,如果输出是:
abc
def
qwerty
是否可以打印:
abcdefqwerty
答案1
您可以使用 删除给定集合中出现的所有字符tr -d
。要删除换行符,请使用:
tr -d '\n'
与往常一样,您可以使用输入和输出重定向和管道来读取或写入文件和其他进程。
如果您想保留最后一个换行符,您可以简单地用echo
或将其添加回来printf '\n'
,例如:
cat file1 file2... | { tr -d '\n'; echo; } > output.txt
答案2
有很多方法。为了说明,我已将您的示例保存在file
:
$ cat file | tr -d '\n'
abcdefqwerty$
$ cat file | perl -pe 's/\n//'
abcdefqwerty$
这会删除所有换行符,包括最后一个换行符。你可能需要这样做:
$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
答案3
您可以通过管道传输多行输出awk
awk '{printf "%s",$0} END {print ""}'
或使用sed
:
sed ':a;N;$!ba;s/\n//g'
示例运行
$ 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
答案4
这个答案可以解决您尝试创建的问题:为什么 bash 会删除 $(cat file) 中的 \n?
如果你输入,cat myfile.txt
你会看到:
abc
def
ghi
但如果你输入,echo $(cat myfile.txt)
你会看到:
abc def ghi
请注意,此方法会在原来单独的新行处插入一个空格。这会使输出更易于阅读,但并不严格遵守您的问题范围。