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

Bol*_*wyn 18 bash stdout concatenation

在我的情况下,用例是CSS文件串联,然后才能最小化.要连接两个CSS文件:

cat 1.css 2.css > out.css
Run Code Online (Sandbox Code Playgroud)

要在一个位置添加一些文本,我可以做到

cat 1.css <<SOMESTUFF 2.css > out.css
This will end in the middle.
SOMESTUFF
Run Code Online (Sandbox Code Playgroud)

要添加STDOUT 一个其他程序:

sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但我经常遇到这样的情况,我需要将几个字符串,文件甚至程序输出混合在一起,比如版权标题,预处理的文件sed(1)等等.我想在尽可能少的步骤和临时文件中将它们连接在一起,同时可以自由选择顺序.

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

command [string|file|output]+ > concatenated
# note the plus ;-) --------^
Run Code Online (Sandbox Code Playgroud)

(基本上,有一个cat处理多个STDIN就足够了,我猜,就像

<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2-
Run Code Online (Sandbox Code Playgroud)

但我没有看到,我如何访问这些.)

Pau*_*ce. 26

这有效:

cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR")
Run Code Online (Sandbox Code Playgroud)

  • 当然@Boldewyn 必须添加`&gt; concatenated.css` 或`| 编译器`在最后,它可以像这样解决他的问题:`cat file1.css &lt;(echo "FOO") &lt;(command [string|file|output]) file2.css &lt;(echo "BAR") &gt; concatenated ` (2认同)

Jon*_*oni 17

您可以在子shell中添加所有命令,并将其重定向到文件:

(
    cat 1.css
    echo "FOO"
    sed ...
    echo BAR
    cat 2.css
) > output
Run Code Online (Sandbox Code Playgroud)

您也可以附加到文件>>.例如:

cat 1.css  >  output
echo "FOO" >> output
sed ...    >> output
echo "BAR" >> output 
cat 2.css  >> output
Run Code Online (Sandbox Code Playgroud)

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


nha*_*tdh 14

你可以做:

echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile
Run Code Online (Sandbox Code Playgroud)