如何在bash中换行输出?

时间:2012-07-05 05:22:30

标签: bash shell

我有一个以这种格式输出的命令:

A
B
C
D
E
F
G
I
J

等 我希望输出采用这种格式

A B C D E F G I J

我尝试使用./script | tr "\n" " ",但它只是从输出中删除n 如何在一行中获得所有输出。 (换行)

  

编辑:我在问这个问题的时候不小心插了grep。我删除了   它。我原来的问题仍然存在。

4 个答案:

答案 0 :(得分:3)

grep是多余的。

这应该有效:

./script | tr '\n' ' '

它为我做了一个命令al,每行列出一个参数:

$ al A B C D E F G H I J
A
B
C
D
E
F
G
H
I
J
$ al A B C D E F G H I J | tr '\n' ' '
A B C D E F G H I J $

答案 1 :(得分:1)

正如Jonathan Leffler指出的那样,你不需要grep。您正在使用的命令:

./script | grep tr "\n" " "

甚至不调用tr命令; 应该在名为"tr""\n"的文件中搜索模式" "。由于这不是您报告的输出,我怀疑您错误输入了您正在使用的命令。

你可以这样做:

./script | tr '\n' ' '

但是(a)它将所有输入连接成一行,并且(b)它不会在行尾添加换行符。通常,这意味着您的shell提示将打印在输出行的末尾。

如果你想要一行上的所有内容,你可以这样做:

./script | tr '\n' ' ' ; echo ''

或者,如果您希望将输出包装到合理的宽度:

./script | fmt

fmt命令有许多选项来控制最大行长等内容;请阅读其文档(man fmtinfo fmt)以获取详细信息。

答案 2 :(得分:0)

不需要使用其他程序,为什么不使用Bash来完成这项工作? (编辑中添加了--

line=$(./script.sh) 
set -- $line
echo "$*"

set设置命令行选项,其中一个(默认情况下)分隔符为“\ n”。编辑:这将覆盖任何现有的命令行参数,但良好的编码实践会建议您在脚本的早期将这些参数重新分配给命名变量。

当我们使用"$*"(注意引号)时,它会再次使用IFS第一个字符作为粘合剂将它们连接在一起。默认情况下,这是一个空格。

tr是一个不必要的子进程。

顺便说一下,有一个名为script的命令,所以要小心使用该名称。

答案 3 :(得分:0)

如果我没弄错的话,echo命令会在其参数未加引号时自动删除换行符:

tmp=$(./script.sh)
echo $tmp

结果

A B C D E F G H I J

,而

tmp=$(./script.sh)
echo "$tmp"

结果

A 
B 
C 
D 
E 
F 
G 
H 
I 
J

如果需要,可以将echo命令的输出重新分配给另一个变量:

tmp=$(./script.sh)
tmp2=$(echo $tmp)

$tmp2变量将不包含换行符。