在bash中连接两个没有换行符的命令的输出

时间:2014-01-01 18:00:10

标签: bash sed concatenation pipe

我需要什么:

假设我有两个命令AB,每个命令都返回一个单行字符串(即一个没有换行符的字符串,最后可能只有1)。我需要一个命令(或管道命令序列)C,它在同一行连接命令AB的输出,并在它们之间插入1个空格字符。

如何运作的示例:

例如,假设命令A的输出是之间的字符串

"The quick"

假设命令B的输出是之间的字符串

"brown fox"

然后我希望命令C的输出是引号之间的字符串

"The quick brown fox"

我最好的尝试解决方案:

在尝试自己弄清楚C时,管道命令的后续序列似乎应该有效:

{ echo "The quick" ; echo "brown fox" ; } | xargs -I{} echo {} | sed 's/\n//'

不幸的是,这个命令的输出是

The quick
brown fox

5 个答案:

答案 0 :(得分:53)

您可以使用tr

{ echo "The quick"; echo "brown fox"; } | tr "\n" " "

或使用sed:

{ echo "The quick"; echo "brown fox"; } | sed ':a;N;s/\n/ /;ba'

输出:

The quick brown fox 

答案 1 :(得分:32)

echo "$(A)" "$(B)"
假设AB都不输出多行,

应该有效。

$ echo "$(echo "The quick")" "$(echo "brown fox")"
The quick brown fox

答案 2 :(得分:5)

$ commandA () { echo "The quick"; }
$ commandB () { echo "brown fox"; }
$ x="$(commandA) $(commandB)"
$ echo "$x"
The quick brown fox

答案 3 :(得分:2)

我试着用另一个简单的例子解释解决方案

我们要连接以下命令的输出:
" PWD"和" ls"

echo "$(pwd)$(ls)";

输出:2个连接字符串

答案 4 :(得分:1)

$ { echo -n "The quick" ; echo -n " " ; echo "brown fox" ; }
The quick brown fox