在Bash中连接字符串,文件和程序输出

时间:2012-06-08 11:11:02

标签: bash concatenation stdout

在我的情况下,用例是CSS文件连接,在它被最小化之前。连接两个CSS文件:

cat 1.css 2.css > out.css

要在一个位置添加一些文字,我可以

cat 1.css <<SOMESTUFF 2.css > out.css
This will end in the middle.
SOMESTUFF

一个其他程序添加STDOUT:

sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css

到目前为止一切顺利。但我经常遇到这种情况,我需要将几个字符串,文件甚至程序输出混合在一起,例如版权标题,由sed(1)预处理的文件等。我希望尽可能简单地将它们连接在一起,只需要很少的步骤和临时文件,同时可以自由选择订单。

简而言之,我正在寻找一种方法,以尽可能少的步骤在Bash中执行此操作:

command [string|file|output]+ > concatenated
# note the plus ;-) --------^

(基本上,让cat处理多个STDIN就足够了,我想,就像

<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2-

但是我没有看到,我怎么能访问它们。)

3 个答案:

答案 0 :(得分:25)

这有效:

cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR")

答案 1 :(得分:16)

您可以在子shell中添加所有命令,这些命令会重定向到文件:

(
    cat 1.css
    echo "FOO"
    sed ...
    echo BAR
    cat 2.css
) > output

您还可以使用>>附加到文件。例如:

cat 1.css  >  output
echo "FOO" >> output
sed ...    >> output
echo "BAR" >> output 
cat 2.css  >> output

(这可能会反复打开和关闭文件)

答案 2 :(得分:13)

你可以这样做:

echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile