syn*_*tik 48 bash sed pipe concatenation
我需要的:
假设我有两个命令,A并且B每个命令返回一个单行字符串(即一个没有换行符的字符串,除了最后可能为1).我需要一个命令(或管道命令序列)C,它连接命令的输出A并B在同一行上,并在它们之间插入1个空格字符.
它应该如何工作的示例:
例如,假设命令的输出A是引号之间的字符串:
"The quick"
Run Code Online (Sandbox Code Playgroud)
并且假设命令的输出B是引号之间的字符串:
"brown fox"
Run Code Online (Sandbox Code Playgroud)
然后我希望命令的输出是引号之间的C字符串:
"The quick brown fox"
Run Code Online (Sandbox Code Playgroud)
我最好的尝试解决方案
在试图弄清楚C自己,似乎管道命令的后续序列应该工作:
{ echo "The quick" ; echo "brown fox" ; } | xargs -I{} echo {} | sed 's/\n//'
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个命令的输出是
The quick
brown fox
Run Code Online (Sandbox Code Playgroud)
anu*_*ava 60
你可以使用tr:
{ echo "The quick"; echo "brown fox"; } | tr "\n" " "
Run Code Online (Sandbox Code Playgroud)
或使用sed:
{ echo "The quick"; echo "brown fox"; } | sed ':a;N;s/\n/ /;ba'
Run Code Online (Sandbox Code Playgroud)
The quick brown fox
Run Code Online (Sandbox Code Playgroud)
Mat*_*Mat 35
echo "$(A)" "$(B)"
Run Code Online (Sandbox Code Playgroud)
应该假设既不输出A也不B输出多行.
$ echo "$(echo "The quick")" "$(echo "brown fox")"
The quick brown fox
Run Code Online (Sandbox Code Playgroud)
我将尝试用另一个简单的例子来解释解决方案
我们必须连接以下命令的输出:
“pwd”和“ls”
echo "$(pwd)$(ls)";
Run Code Online (Sandbox Code Playgroud)
输出:2个连接的字符串
$ commandA () { echo "The quick"; }
$ commandB () { echo "brown fox"; }
$ x="$(commandA) $(commandB)"
$ echo "$x"
The quick brown fox
Run Code Online (Sandbox Code Playgroud)